悬赏1关注,10pts求调
查看原帖
悬赏1关注,10pts求调
540363
AKPC楼主2023/1/9 14:25
#include <bits/stdc++.h>
using namespace std;
#define int long long
int block[2000010],tag[2000010],sum[2000010],a[2000010];
signed main(){
	int n,f,size;
	cin>>n>>f;
	size=sqrt(n);
	for(int i=1;i<=n;i++){
		a[i]=0;
		block[i]=(i-1)/size+1;
		sum[block[i]]+=a[i];
	}
	for(int i=1;i<=f;i++){
		int opt;
		cin>>opt;
		if(opt==0){
			long long l,r,k=1;
			cin>>l>>r;
			for(int i=l;i<=min(r,block[l]*size);i++){
				a[i]+=k;
				sum[block[i]]+=k;
			}
			if(block[l]!=block[r])
				for(int i=r;i>=(block[r]-1)*size+1;i--){
					a[i]+=k;
					sum[block[i]]+=k;
				}
			for(int i=block[l]+1;i<=block[r]-1;i++) tag[i]+=k;
		}
		else if(opt==1){
			long long l,r;
			long long ans=0;
			cin>>l>>r;
			for(int i=l;i<=min(r,block[l]*size);i++) ans+=(a[i]+tag[block[i]])%2;
			if(block[l]!=block[r]) for(int i=r;i>=(block[r]-1)*size+1;i--) ans+=(a[i]+tag[block[i]])%2;
			for(int i=block[l]+1;i<=block[r]-1;i++) ans+=(sum[i]+tag[i]*size)%2;
			cout<<ans<<endl;
		}
	}
	return 0;
}
2023/1/9 14:25
加载中...