全WA悬棺求条
查看原帖
全WA悬棺求条
754639
I_Was_Spasmodic楼主2024/11/2 17:06
#include<bits/stdc++.h>
using namespace std;
bool st;
const int N=1e5+5;
const int M=350;
int n,c,q,B,S,l,r,ans;
int a[N],bel[N],times[M][N],cnt[M][M],tong[N];
unordered_map<int,int>m;
bool ed;
int rd()
{
	int res=0;
	char c=getchar();
	while(!isdigit(c))c=getchar();
	while(isdigit(c))res=res*10+c-'0',c=getchar();
	return res;
}
signed main()
{
	cerr<<(&ed-&st)/1024.0/1024<<'\n';
	//freopen("in.in","r",stdin);
	n=rd();c=rd();q=rd();
	B=ceil(pow(n,0.5));
	S=ceil((double)n/B);
	for(int i=1;i<=n;i++)
	{
		a[i]=rd();
		bel[i]=ceil((double)i/S);
		for(int j=bel[i];j<=B;j++)times[j][a[i]]++;
	}
	for(int i=1;i<=B;i++)
	{
		fill(tong,tong+c+1,0);
		for(int j=i;j<=B;j++)
		{
			cnt[i][j]=cnt[i][j-1];
			int l=(j-1)*S+1,r=min(j*S,n);
			for(int k=l;k<=r;k++)
			{
				tong[a[k]]++;
				if((tong[a[k]]&1)==0)
					cnt[i][j]++;
			}
		}
	}
	while(q--)
	{
		l=rd();r=rd();
		l=(l+ans)%n+1;
		r=(r+ans)%n+1;
		ans=0;
		if(l>r)swap(l,r);
		if(bel[r]-bel[l]<=1)
		{
			m.clear();
			for(int i=l;i<=r;i++)
			{
				m[a[i]]++;
				if((m[a[i]]&1)==0)
					ans++;
			}
		}
		else {
			int L=bel[l]*S,R=(bel[r]-1)*S+1;
			ans=cnt[bel[l]+1][bel[r]-1];
			for(int i=l;i<=r;i++)
			{
				if(i==L+1)i=R;
				times[bel[r]-1][a[i]]++;
				if(((times[bel[r]-1][a[i]]-times[bel[l]][a[i]])&1)==0)
					ans++;
			}
			for(int i=l;i<=r;i++)
			{
				if(i==L+1)i=R;
				times[bel[r]-1][a[i]]--;
			}
		}
		printf("%d\n",ans);
	}
}
2024/11/2 17:06
加载中...