1 条题解

  • 0
    @ 2026-7-19 22:39:48
    #include<bits/stdc++.h>
    using namespace std;
    
    constexpr int N=5e5+5,M=2e3+5;
    int n,m,lstans,sz,l,r;
    int a[N],x[N],pos[N],cnt[N];
    int mst[M][M],blk[N],st[M],en[M];
    vector<int>v[N];
    
    int query(int l,int r){
        int ans=1;
        if(blk[l]==blk[r]){
            for(int i=l;i<=r;i++) cnt[a[i]]=0;
            for(int i=l;i<=r;i++){
                cnt[a[i]]++;
                ans=max(ans,cnt[a[i]]);
            }
        }
        else{
            if(blk[l]+1<=blk[r]-1) ans=mst[blk[l]+1][blk[r]-1];
            for(int i=l;i<=en[blk[l]];i++){
                int res=pos[i]+ans;
                for(;res<v[a[i]].size()&&v[a[i]][res]<=r;){
                    ans++;
                    res++;
                }
            }
            for(int i=r;i>=st[blk[r]];i--){
                int res=pos[i]-ans;
                for(;res>=0&&v[a[i]][res]>=l;){
                    ans++;
                    res--;
                }
            }
        }
        return ans;
    }
    
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
        cin>>n>>m;
        sz=720;
        for(int i=1;i<=n;i++){
            cin>>a[i]; x[i]=a[i];
            blk[i]=(i+sz-1)/sz;
            if(!st[blk[i]]) st[blk[i]]=i;
            en[blk[i]]=i;
        }
        sort(x+1,x+n+1);
        int tmp=unique(x+1,x+n+1)-(x+1);
        for(int i=1;i<=n;i++){
            a[i]=lower_bound(x+1,x+tmp+1,a[i])-x;
            pos[i]=v[a[i]].size();
            v[a[i]].push_back(i);
        }
        for(int i=1;i<=blk[n];i++){
            memset(cnt,0,sizeof(cnt));
            for(int j=i;j<=blk[n];j++){
                mst[i][j]=mst[i][j-1];
                for(int k=st[j];k<=en[j];k++){
                    cnt[a[k]]++;
                    mst[i][j]=max(mst[i][j],cnt[a[k]]);
                }
            }
        }
        for(int i=1;i<=m;i++){
            cin>>l>>r;
            l^=lstans,r^=lstans;
            if(l>r) swap(l,r);
            lstans=query(l,r);
            cout<<lstans<<endl;
        }
    }
    
    • 1

    [Ynoi2019 模拟赛] Yuno loves sqrt technology III

    信息

    ID
    12513
    时间
    2000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者