比赛 |
随便比赛 |
评测结果 |
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;
}