AC但是似乎是假做法
查看原帖
AC但是似乎是假做法
501923
duchengjun楼主2024/10/26 23:46

求 hack ~~~

#include<iostream>
#include<cmath>
#include<algorithm>
#include<string.h>

#define LL long long

using namespace std;

const int N=2*1e5+10,M=1e6+10;

int T;
int n;
int a[N];
int last[M];
LL f[N];
LL sum[N];

void Solve(){
	
	memset(f,0,sizeof(f));
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		last[a[i]]=-1;
		if(a[i]==a[i-1])
			sum[i]=sum[i-1]+1LL*a[i];
		else
			sum[i]=sum[i-1];
	}
	for(int i=1;i<=n;i++){
		int tmp=last[a[i]];
		last[a[i]]=i;
		f[i]=f[i-1];
		if(tmp==-1)continue;
		if(tmp+1==i){
			f[i]=max(f[i],f[i-1]+1LL*a[i]);
			continue;
		}
		f[i]=max(f[i],f[tmp+1]+sum[i-1]-sum[tmp+1]+1LL*a[i]);
	}
	printf("%lld\n",f[n]);
	return ;
	
}

int main(){
	
	scanf("%d",&T);
	while(T--)
		Solve();
	return 0;
	
}
2024/10/26 23:46
加载中...