• CF-div3-635-E


    代码

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn = 2e5+100;
    int a[maxn];
    int n;
    
    int main(){
    	int t;
    	cin>>t;
    	while(t--){
    		cin>>n;
    		vector<int> v[300];
    		int ans = 0; 
    		for(int i = 1;i<=n;i++) {
    			cin>>a[i];
    			v[a[i]].push_back(i);
    		} 
    		for(int i = 1;i<=200;i++){ //枚举a 
    			int siz = v[i].size();
    			ans = max(ans,siz);
    			for(int j = 0;j<siz/2;j++){ //枚举左边多少个a  对应右边也有这么多a 
    				int l = v[i][j]; //j:左边a结束的下标 端点的值l(左边最后)  v[i][j]就是结束位置 j+1就是左边a的个数
    				int r = v[i][siz-1-j]; //右端点a开始 (右边最前) siz-1-j (因为左右个数同,这里直接算出右边a开始的位置siz-1-j)
    				for(int k = 1;k<=200;k++){ //枚举b 是哪个数
    					if(k == i) continue;
    					//l位置之后 
    					int cnt1 = upper_bound(v[k].begin(),v[k].end(),l) - v[k].begin();
    					//r位置之前 
    					int cnt2 = upper_bound(v[k].begin(),v[k].end(),r) - v[k].begin();
    					//l~r之间为k的个数 cnt2-cnt1  再加上 左边a的个数j+1 对应右边a的个数j+1 
    					ans = max(cnt2-cnt1+(j+1)+(j+1),ans);
    				}
    			}
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    ==和equals区别
    如何创建一个不可变类
    mysql用户的创建和授权
    事务
    Java知识点检测
    Redis
    正则表达式中match的用法
    rfind的用法
    找出文件夹里所有的文件路径
    合并多个pdf文件
  • 原文地址:https://www.cnblogs.com/fisherss/p/12705428.html
Copyright © 2020-2023  润新知