比赛 集训 评测结果 WWWWAAAWWTW
题目名称 兔子集团军 最终得分 27
用户昵称 左清源 运行时间 3.796 s
代码语言 C++ 内存使用 21.72 MiB
提交时间 2025-07-03 11:58:52
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
typedef long long ll;
int n,c[N],L[N],R[N],m,top,tot;
ll f[N],v[N],ans=4e18;
struct val{int l,r;}a[N],stk[N],b[N];
bool cmp(val a,val b){return a.l<b.l;}
ll calc(int l,int r){
	ll res=0;
	for(int i=l;i<=r;i++)res+=v[i]*f[i-l+1]*f[i-l+1];
	return res;
}
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(!L[c[i]])L[c[i]]=i;
		R[c[i]]=i;
	}
	for(int i=1;i<=n;i++){
		if(!L[i])continue;
		a[++m]=val{L[i],R[i]};
	}
	sort(a+1,a+1+m,cmp);
	for(int i=1;i<=m;i++){
		while(top&&a[i].l>stk[top].r)b[++tot]=stk[top--];
		while(top&&a[i].r>stk[top].r){
			int r=a[i].r;a[i]=val{stk[top].l,r};top--;
		}
		stk[++top]=a[i];
	}
	while(top)b[++tot]=stk[top--];
	for(int i=1;i<=tot;i++)ans=min(ans,calc(b[i].l,b[i].r));
	printf("%lld\n",ans);
	return 0;
}