社区讨论
n方过百万?不,n立方过百万
P14567【MX-S12-T2】区间参与者 10已保存回复 10
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @mi9uzar4
- 此快照首次捕获于
- 2025/11/22 13:38 3 个月前
- 此快照最后确认于
- 2025/11/22 14:20 3 个月前
https://www.luogu.com.cn/record/248748851
CPP#include<bits/stdc++.h>
#define int long long
#define MAXN 1000007
using namespace std;
struct cNode{
int l,r;
};
int n;
int ans=INT_MAX;
int c[MAXN],v[MAXN],f[MAXN];
cNode d[MAXN];
int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
f=-1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
bool cmp(cNode A,cNode B){
return (A.l==B.l)?A.r<B.r:A.l<B.l;
}
signed main(){
n=read();
for(int i=1;i<=n;i++){
c[i]=read();
if(d[c[i]].l==0){
d[c[i]].l=i;
}
d[c[i]].r=i;
}
for(int i=1;i<=n;i++){
v[i]=read();
}
for(int i=1;i<=n;i++){
f[i]=read();
}
for(int i=1;i<=n;i++){
if(i>d[c[i]].l){
continue;
}
for(int j=d[c[i]].r,x=i;j<=n;j=max(j+1,d[c[x]].r)){
x++;
bool flag=1;
int cnt=0;
for(int k=i;k<=j;k++){
if(d[c[k]].l<i||d[c[k]].r>j){
flag=0;
cnt=INT_MAX;
break;
}
cnt+=v[k]*f[k-i+1];
}
ans=min(ans,cnt);
if(flag){
break;
}
}
}
cout<<ans<<'\n';
return 0;
}
回复
共 10 条回复,欢迎继续交流。
正在加载回复...