比赛 随便比赛 评测结果 MMMMMMMMMM
题目名称 作诗 最终得分 0
用户昵称 flyfree 运行时间 0.010 s
代码语言 C++ 内存使用 1.32 MiB
提交时间 2024-08-27 19:49:14
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100010
int n,c,m,len,t,ans,ql,qr;
bool cnt[60][60][MAXN],h[60][60][MAXN];
int l[310],r[310],a[MAXN],g[MAXN],re[MAXN],qh[MAXN];
int main(){
    freopen("poetize.in","r",stdin);
    freopen("poetize.out","w",stdout);
    cin>>n>>c>>m;
    for(int i=1;i<=n;i++)cin>>a[i];
    len=sqrt(n),t=n;
    for(int i=1;i<=t;i++){
        l[i]=(i-1)*len+1;
        r[i]=i*len;
        for(int j=l[i];j<=r[i];j++){
            cnt[i][i][a[j]]^=1;
            h[i][i][a[j]]=1;
            g[j]=i;
        }
    }
    if(len*len<n){
        l[++t]=(t-1)*len+1;
        r[t]=n;
        for(int j=l[t];j<=r[t];j++){
            cnt[t][t][a[j]]^=1;
            h[t][t][a[j]]=1;
            g[j]=t;
        }
    }
    for(int i=1;i<t;i++){
        for(int j=t+1;j<=t;j++){
            for(int u=1;u<=c;u++){
                cnt[i][j][u]=cnt[i][j-1][u]^cnt[j][j][u];
                h[i][j][u]=h[i][j-1][u]|h[j][j][u];
            }
        }
    }
    for(int i=1;i<=m;i++){
        memset(re,0,sizeof(re));
        memset(qh,0,sizeof(qh));
        cin>>ql>>qr;
        ql=(ql+ans)%n+1,qr=(qr+ans)%n+1;
        if(ql>qr)swap(ql,qr);
        ans=0;
        if(g[ql]==g[qr]){
            for(int j=ql;j<=qr;j++){
                re[a[j]]^=1;
                qh[a[j]]=1;
            }
        }else{
            for(int j=1;j<=c;j++){
                re[j]=cnt[g[ql]+1][g[qr]-1][j];
                qh[j]=h[g[ql]+1][g[qr]-1][j];
            }
            for(int j=ql;j<=r[g[ql]];j++){
                re[a[j]]^=1;
                qh[a[j]]=1;
            }
            for(int j=l[g[qr]];j<=qr;j++){
                re[a[j]]^=1;
                qh[a[j]]=1;
            }
        }
        for(int j=1;j<=c;j++){
            if(!re[j]&&qh[j])ans++;
        }
        cout<<ans<<endl;
    }
    return 0;
}