记录编号 602356 评测结果 AAAAAAAAAAA
题目名称 4162.兔子集团军 最终得分 100
用户昵称 GravatarHollow07 是否通过 通过
代码语言 C++ 运行时间 2.456 s
提交时间 2025-07-03 17:14:24 内存使用 23.37 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const ll MXN=0x3f3f3f3f3f3f3f3f;
const ll MINX=-0x3f3f3f3f3f3f3f3f;

ll n,c[1100000],v[1100000],f[1100000];
ll l[1100000],r[1100000],ans;
//deque <ll> q;
queue <ll> q;
void solve(ll lr,ll rr){
	ll mid=(lr+rr)>>1;
	ll x=mid,y=mid;
	while(!q.empty())q.pop();
	q.push(c[mid]);
	bool flag=0;
	while(!q.empty()){
		ll p=q.front();q.pop();
		if(l[p]<lr||rr<r[p]){
			flag=1;
			break;
		}else{
			for(int k=x-1;k>=l[p];k--)q.push(c[k]);
			for(int k=y+1;k<=r[p];k++)q.push(c[k]);
			x=min(x,l[p]);
			y=max(y,r[p]);
		}
	}
	ll ans1=0;
	for(int i=x;i<=y;i++)
		ans1+=v[i]*f[i-x+1]*f[i-x+1];
	if(!flag) ans=min(ans,ans1);
	if(lr==rr) return;
	else solve(lr,mid),solve(mid+1,rr);
	return;
}

int main() {
	freopen("RRR.in","r",stdin);
	freopen("RRR.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n;
    for (int i=1;i<=n;i++) cin>>c[i];
    for (int i=1;i<=n;i++) cin>>v[i];
    for (int i=1;i<=n;i++) cin>>f[i];
    for (int i=1;i<=n;i++){
    	if (l[c[i]]==0) l[c[i]]=i;
    	r[c[i]]=i;
	}
	ans=0x3f3f3f3f3f3f3f3f;
	solve(1,n);
	printf("%lld",ans);
    return 0;
}