30pts求调
查看原帖
30pts求调
687911
chenyihao2011楼主2024/10/25 20:14
#include <bits/stdc++.h>
using namespace std;

const int N=5e5+10;
int n,x,ans,dig[N];
int a[N],dp[N];
vector<int> num[N];
vector<int> mx;
int mv;
int main(){
	cin>>n;
	mv=0;
	for(int i=1;i<=n;i++){
		cin>>x;
		dig[i]=x;
		num[x].push_back(i);
	}
	for(int i=1;i<=n;i++){
		dp[i]=mv;
		if(num[dig[i]].size()>=2 and num[dig[i]][1]==i){
			cout<<mv<<" "<<i<<" "<<2+dp[num[dig[i]][0]]<<endl;
			if(mv<2+dp[num[dig[i]][0]]){
				if(mx.empty()){
					mv=2+dp[num[dig[i]][0]];
					mx.push_back(dig[i]);
					dp[i]=mv;
				}
				for(int j=0;j<mx.size();j++){
					if(mx[j]!=dig[i]){
						mx.clear();
						mx.push_back(dig[i]);
						mv=2+dp[num[dig[i]][0]];
						dp[i]=mv;
						break;
					}
				}
			}else if(mv==2+dp[num[dig[i]][0]]){
				mx.push_back(dig[i]);
			}
			num[dig[i]].erase(num[dig[i]].begin());
			if(dp[i]!=dp[i-1])num[dig[i]].erase(num[dig[i]].begin());
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++) cout<<dp[i]<<" ";
	cout<<mv;
 	return 0;
}

2024/10/25 20:14
加载中...