社区讨论

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 条回复,欢迎继续交流。

正在加载回复...