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