大佬!大佬!求调
查看原帖
大佬!大佬!求调
1397174
zldx楼主2024/11/23 15:24
#include<bits/stdc++.h>
using namespace std;
#define ft first
#define sd second
typedef long long ll;
typedef vector<bool> veb;
typedef vector<ll> vel;
typedef vector<vel> vevel;
typedef vector<vevel> vevevel;
typedef vector<pair<ll,ll>> velp;
typedef vector<pair<bool,bool>> velb;
typedef vector<char> vec;
typedef map<ll,ll> mll;
typedef map<char,ll> mcl;
typedef map<ll,char> mlc;
typedef map<ll,bool> mlb;
typedef map<char,char> mcc;
typedef vector<pair<char,char>> vecp;
typedef priority_queue<ll> pql;
const ll mo = 1e9+7;
void slv(){
    int n;
    cin>>n;
    vel v(n+1);
    for(int i=1;i<=n;i++){
        cin>>v[i];
    }
    velp odd;//单
    velp even;//偶
    for(int i=2;i<=n;i++){
        if(v[i]==v[i-1]){
            if(i%2==0){
                even.emplace_back(i,v[i]);
            }else{
                odd.emplace_back(i,v[i]);
            }
        }
    }
    mll mp;
    mll ans;
    ll num=1;
    ll maxn=0;
    int jiezhi=-1;
    if(!even.empty()){
        mp[even[0].sd]=even[0].ft;
        ans[even[0].ft]=1;
        maxn=max(maxn,num);
    }
    for(int i=1;i<even.size();i++){
        if(even[i].ft-2!=even[i-1].ft){
            maxn=max(maxn,num);
            num=0;
            jiezhi=even[i].ft;
        }
        if(mp.find(even[i].sd)!=mp.end()&&mp[even[i].sd]>=jiezhi){
            maxn=max(maxn,num);
            num-=ans[mp[even[i].sd]];
            jiezhi=even[i].ft;
        }
        num++;
        mp[even[i].sd]=even[i].ft;
        ans[even[i].ft]=num;
    }
    if(num!=1) {
        maxn = max(maxn, num);
    }
    mp.clear();
    ans.clear();
    num=1;
    jiezhi=-1;
    if(!odd.empty()){
        mp[odd[0].sd]=odd[0].ft;
        ans[odd[0].ft]=1;
        maxn=max(maxn,num);
    }
    for(int i=1;i<odd.size();i++){
        if(odd[i].ft-2!=odd[i-1].ft){
            maxn=max(maxn,num);
            num=0;
            jiezhi=odd[i].ft;
        }
        if(mp.find(odd[i].sd)!=mp.end()&&mp[odd[i].sd]>=jiezhi){
            maxn=max(maxn,num);
            num-=ans[mp[odd[i].sd]];
            jiezhi=odd[i].ft;
        }
        num++;
        mp[odd[i].sd]=odd[i].ft;
        ans[odd[i].ft]=num;
    }
    if(num!=1){
        maxn=max(maxn,num);
    }
    cout<<maxn*2<<"\n";
}
int main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    ll t=1;
//    cin>>t;
    while(t--){
        slv();
    }
    return 0;
}

2024/11/23 15:24
加载中...