记录编号 602576 评测结果 AAAAAAAAAAA
题目名称 4162.兔子集团军 最终得分 100
用户昵称 Gravatar李奇文 是否通过 通过
代码语言 C++ 运行时间 2.471 s
提交时间 2025-07-04 16:31:51 内存使用 23.42 MiB
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
int n,c[N],ll[N],rr[N],top,tot;
int f[N],v[N],ans=4e18;
queue<int>q;
void solve(int l,int r){
	int mid=(l+r)>>1,i=mid,j=mid;
	while(q.size())q.pop();
	q.push(c[mid]);bool flag=0;
	while(q.size()){
		int x=q.front();q.pop();
		if(ll[x]<l||r<rr[x]){
			flag=1;
			break;
		}else{
			for(int k=i-1;k>=ll[x];k--)q.push(c[k]);
			for(int k=j+1;k<=rr[x];k++)q.push(c[k]);
			i=min(i,ll[x]),j=max(j,rr[x]);
		}
	}
	if(!flag){
		int hs=0,a=i,b=j;
		for(;a<=b;a++){
			hs+=v[a]*f[a-i+1]*f[a-i+1];
		}
		ans=min(ans,hs);
	}
	if(l==r)return;
	else solve(l,mid),solve(mid+1,r);
	return;
}
signed main(){
	freopen("RRR.in","r",stdin); 
	freopen("RRR.out","w",stdout); 
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&c[i]);
	}
	for(int i=1;i<=n;i++){
		scanf("%lld",&v[i]);
	}
	for(int i=1;i<=n;i++){
		scanf("%lld",&f[i]);
	}
	for(int i=1;i<=n;i++){
		if(!ll[c[i]]) ll[c[i]]=i;
		rr[c[i]]=i;
	}
	solve(1,n);
	printf("%lld\n",ans);
	return 0;
}