记录编号 |
602356 |
评测结果 |
AAAAAAAAAAA |
题目名称 |
4162.兔子集团军 |
最终得分 |
100 |
用户昵称 |
Hollow07 |
是否通过 |
通过 |
代码语言 |
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;
}