Codeforces Round #634 (Div. 3) E2. Three Blocks Palindrome (hard version)(前綴和+思維)

題目鏈接
在這裏插入圖片描述
在這裏插入圖片描述

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+1;
int T,n,sum[201][maxn],a[maxn],num[201];
vector<int>v[201];
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		int maxx=0;
		scanf("%d",&n);
		for(int i=0;i<=200;++i) 
		{
			v[i].clear();
			num[i]=0;
			for(int j=1;j<=n;++j) sum[i][j]=0;
		}
		for(int i=1;i<=n;++i)
		{
			scanf("%d",&a[i]);
			v[a[i]].push_back(i);
			num[a[i]]++;
			sum[a[i]][i]++;
			maxx=max(maxx,num[a[i]]);
		}
		int ans=maxx;
		for(int i=1;i<=200;++i)
		for(int j=1;j<=n;++j)
		sum[i][j]+=sum[i][j-1];
		for(int i=1;i<=200;++i)
		{
			int size=v[i].size();
			for(int j=0;j<size/2;++j)
			{
				int l=v[i][j],r=v[i][size-j-1];
				for(int k=1;k<=200;++k)
				ans=max(ans,(j+1)*2+sum[k][r-1]-sum[k][l]);
			}
		}
		printf("%d\n",ans);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章