10pts求助(玄关)
查看原帖
10pts求助(玄关)
1287433
__ycy1124__楼主2024/7/16 20:57
#include<bits/stdc++.h>
using namespace std;
struct Node{
	long long int w,ma;
}nod[8000001];
void read(long long int &x){
	x=0;
	int f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-'){
			f=-f;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x*=10;
		x+=ch-'0';
		ch=getchar();
	}
	x*=f;
}
int las[1000001],now[1000001];
long long int a[1000001],w[1000001];
void push_up(int p){
	nod[p].w=nod[p].w+nod[p*2+1].w;
	nod[p].ma=max(nod[p*2].ma+nod[p*2+1].ma,max(nod[p*2].ma,nod[p*2+1].ma));
}
void abb(int l,int r,int p,int cnt,int val){
	int mid=l+r>>1;
	if(l==r){
		nod[p].w=val;
		nod[p].ma=val;
		return;
	}
	if(cnt>mid){
		abb(mid+1,r,p*2+1,cnt,val);
		push_up(p);
	}
	else{
		abb(l,mid,p*2,cnt,val);
		push_up(p);
	}
}
int main(){
	long long int n,m;
	read(n);
	read(m);
	for(int i=1;i<=n;i++){
		read(a[i]);
	}
	for(int i=1;i<=m;i++){
		read(w[i]);
	}
	long long int ma=0;
	for(int i=1;i<=n;i++){
		abb(1,n,1,las[a[i]],0);
		las[a[i]]=now[a[i]];
		now[a[i]]=i;
		abb(1,n,1,i,w[a[i]]);
		abb(1,n,1,las[a[i]],-w[a[i]]);
		ma=max(ma,nod[1].w);
	}
	printf("%lld",ma);
	return 0;
}
2024/7/16 20:57
加载中...