55pts求优化
查看原帖
55pts求优化
889917
limingyuan333楼主2024/10/13 12:16
#include<bits/stdc++.h>
using namespace std;
int n,a[500010];
int dp[500010][2];
int t[500010];
int pre[500010];
void solve1(){
	for(int i=1;i<=n;i++){
		for(int j=1;j<i;j++){
			if(a[i]==a[j]){
				dp[i][1]=max(dp[j][0]+2,dp[i][1]);
			}
		}
		for(int j=i-1;j>=1;j--){
			if(a[j]!=a[i]){
				dp[i][0]=max(dp[i][0],dp[j][1]);
			}
		}
	}                                                                                                                   
	int maxn=0;
	for(int i=1;i<=n;i++){
		maxn=max(maxn,max(dp[i][0],dp[i][1]));
	}
	cout<<maxn;
}
void solve2(){
	cout<<0;
}
void solve3(){
	map<int,int>mp;
	int ans=0;
	for(int i=1;i<=n;i++){
		if(mp[a[i]]==1){
			ans++;
			mp[a[i]]=1e9;
		}
		if(!mp[a[i]])	mp[a[i]]=1;
	}
	cout<<ans*2;
}
bool f[500010];
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL),cout.tie(NULL);
	cin>>n;
	for(int i=1;i<=n;i++)	{
		cin>>a[i];
	}
	if(n<=5000){
		solve1();	
	}
	else{
		int fl=0;
		for(int i=1;i<=n;i++){
			if(f[a[i]])	{
				fl=1;
			}
			f[a[i]]=1;
		}
		if(!fl){
			solve2();
		}
		else{
			solve3();
		}	
	}
	return 0;
}
2024/10/13 12:16
加载中...