记录编号 602371 评测结果 AAAAAAAAAAA
题目名称 4162.兔子集团军 最终得分 100
用户昵称 GravatarKKZH 是否通过 通过
代码语言 C++ 运行时间 3.045 s
提交时间 2025-07-03 18:21:43 内存使用 23.86 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const long long N=1e6;
struct node{
	long long l,r;
};
long long n,cnt,ans=1e18;
long long c[N],v[N],f[N],a[N];
long long h[N],t[N],sum[N];
queue <long long> q;
long long update(long long l,long long r){
	long long res=0;
    for(long long i=l;i<=r;++i){
        res+=v[i]*f[i-l+1]*f[i-l+1];
    }
    return res;
}
void solve(long long l,long long r){
	if(l>r)return;
    long long mid=(l+r)>>1,ls,rs;
    ls=mid,rs=mid;
    queue<long long>q;
    q.push(mid);
    bool rr=true;
    while(!q.empty()){
        long long x=q.front();
        q.pop();
        if(h[c[x]]<ls){
            if(h[c[x]]<l){
                rr=false;
                break;
            }
            for(long long i=h[c[x]];i<ls;++i)q.push(i);
            ls=h[c[x]];
        }
        if(t[c[x]]>rs){
            if(t[c[x]]>r){
                rr=false;
                break;
            }
            for(long long i=rs+1;i<=t[c[x]];++i)q.push(i);
            rs=t[c[x]];
        }
    }
    if(rr){
        long long res=update(ls, rs);
        ans=min(ans,res);
    }
    solve(mid+1,r);
    solve(l,mid-1);
    return;
}
int main(){
	freopen("RRR.in","r",stdin);
	freopen("RRR.out","w",stdout);
	std::ios::sync_with_stdio(false);
	cin>>n;
	for(long long i=1;i<=n;i++){
		cin>>c[i];
		if(a[c[i]]==false)
			h[c[i]]=i;
		a[c[i]]=true;
		t[c[i]]=i;
	}
//	cout<<cnt;
	for(long long i=1;i<=n;i++)
		cin>>v[i];
	for(long long i=1;i<=n;i++){
		cin>>f[i];
	}
	solve(1,n);
	cout<<ans;
	return 0;
}