萌新全WA求调
  • 板块P4135 作诗
  • 楼主lupipi01
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/7/16 20:04
  • 上次更新2023/11/3 09:28:20
查看原帖
萌新全WA求调
459024
lupipi01楼主2023/7/16 20:04

rt,写了两版,有一版过了就行

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
const int M=405;
int belong[N],bl[M],br[M],a[N],kc;
int ans[M][M],cnt[M][N],ton[N];
signed main(){
	int n,m,c;
	cin>>n>>c>>m;
	kc=sqrt(n);
	int tot=ceil(n*1.0/kc);
	for(int i=1;i<=tot;i++){
		bl[i]=(i-1)*kc+1;
		br[i]=i*kc;
	}
	br[tot]=n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		belong[i]=(i-1)/kc+1;
		cnt[belong[i]][a[i]]++;
	}
	for(int i=1;i<=tot;i++){
		for(int j=0;j<=c;j++){
			cnt[i][j]+=cnt[i-1][j];
//			cout<<cnt[i][j]<<' ';
		}
//		cout<<'\n';
	}
	for(int i=1;i<=tot;i++){
		for(int j=i;j<=tot;j++){
			ans[i][j]=ans[i][j-1];
			for(int k=bl[j];k<=br[j];k++){
				ton[a[k]]++;
				if(ton[a[k]]%2==0){
					ans[i][j]++;
				}else if(ton[a[k]]>=3){
					ans[i][j]--;
				}
			}
//			cout<<ans[i][j]<<' ';
		}
//		cout<<'\n';
		memset(ton,0,sizeof(ton));
	}
	int lst=0;
	while(m--){
		int l,r;
		cin>>l>>r;
		l=(l+lst)%n+1,r=(r+lst)%n+1;
		if(l>r){
			swap(l,r);
		}
		int L=belong[l],R=belong[r];
		int res;
		if(R-L<=1){
			res=0;
			for(int i=l;i<=r;i++){
				ton[a[i]]++;
				if(ton[a[i]]%2==0){
					res++;
				}else if(ton[a[i]]>3){
					res--;
				}
			}
			for(int i=l;i<=r;i++){
				ton[a[i]]--;
			}
		}else{
			res=ans[L+1][R-1];
			for(int i=l;i<=br[L];i++){
				ton[a[i]]++;
				if((ton[a[i]]+cnt[R-1][a[i]]-cnt[L][a[i]])%2==0){
					res++;
				}else if(ton[a[i]]+cnt[R-1][a[i]]-cnt[L][a[i]]>=3){
					res--;
				}
			}
			for(int i=bl[R];i<=r;i++){
				ton[a[i]]++;
				if((ton[a[i]]+cnt[R-1][a[i]]-cnt[L][a[i]])%2==0){
					res++;
				}else if(ton[a[i]]+cnt[R-1][a[i]]-cnt[L][a[i]]>=3){
					res--;
				}
			}
			for(int i=l;i<=br[L];i++){
				ton[a[i]]--;
			}
			for(int i=bl[R];i<=r;i++){
				ton[a[i]]--;
			}
		}
		cout<<res<<'\n';
		lst=res;
	}
} 
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
const int M=405;
int belong[N],bl[M],br[M],a[N],kc;
int ans[M][M],cnt[M][N],ton[N];
int main(){
	int n,m,c;
	cin>>n>>c>>m;
	kc=sqrt(n);
	int tot=0;
	for(int i=1;i<=n;i++){
		if(i%kc==1){
			br[tot]=i-1;
			tot++;
			bl[tot]=i;
		}
		belong[i]=tot;
	}
	br[tot]=n;
	int mx=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		mx=max(mx,a[i]);
		cnt[belong[i]][a[i]]++;
	}
	for(int i=1;i<=tot;i++){
		for(int j=0;j<=mx;j++){
			cnt[i][j]+=cnt[i-1][j];
//			cout<<cnt[i][j]<<' ';
		}
//		cout<<'\n';
	}
	for(int i=1;i<=tot;i++){
		for(int j=i;j<=tot;j++){
			ans[i][j]=ans[i][j-1];
			for(int k=bl[j];k<=br[j];k++){
				ton[a[k]]++;
				if(ton[a[k]]%2==0){
					ans[i][j]++;
				}else if(ton[a[k]]>=3){
					ans[i][j]--;
				}
			}
//			cout<<ans[i][j]<<' ';
		}
//		cout<<'\n';
		memset(ton,0,sizeof(ton));
	}
	int lst=0;
	while(m--){
		int l,r;
		cin>>l>>r;
		l=(l+lst)%n+1,r=(r+lst)%n+1;
		if(l>r){
			swap(l,r);
		}
		int L=belong[l],R=belong[r];
		vector<int> vec;
		for(int i=l;i<=br[L];i++){
			if(!ton[a[i]]){
				vec.push_back(a[i]);
			}
			ton[a[i]]++;
		}
		if(L!=R){
			for(int i=bl[R];i<=r;i++){
				if(!ton[a[i]]){
					vec.push_back(a[i]);
				}
				ton[a[i]]++;
			}
		}
		int res=0;
		if(R-L<=1){
			for(int i=0;i<vec.size();i++){
				int v=vec[i];
				if(ton[v]%2==0){
					res++;
				}
			}
		}else{
			res=ans[L+1][R-1];
			for(int i=0;i<vec.size();i++){
				int v=vec[i];
//				cout<<v<<" "<<ton[v]<<'\n';
				if(cnt[R-1][v]-cnt[L][v]==0){
					if(ton[v]%2==0){
						res++;
					}
				}else{
					if((cnt[R-1][v]-cnt[L][v])%2!=0&&ton[v]%2!=0){
						res++;
					}
					if((cnt[R-1][v]-cnt[L][v])%2==0&&ton[v]%2!=0){
						res--;
					}
				}
			}
		}
		cout<<res<<'\n';
		lst=res;
		for(int i=0;i<vec.size();i++){
			ton[vec[i]]=0;
		}
		vec.clear();
	}
} 
2023/7/16 20:04
加载中...