分块,9TLE,1WA求调
查看原帖
分块,9TLE,1WA求调
538821
m1kusama楼主2023/7/11 15:33
#include<bits/stdc++.h>
#define int long long
#define N 200005
#define M 2005
using namespace std;
inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
			f=-1;
		ch=getchar();
	}
	while(ch>='0' && ch<='9')
		x=x*10+ch-'0',ch=getchar();
	return x*f;
}
		
void write(int x)
{
	if(x<0)
		putchar('-'),x=-x;
	if(x>9)
		write(x/10);
	putchar(x%10+'0');
	return;
}
		
int la[N],belong[N],tag[M];
int len,num;
int n,m,c,a,b;

void init(){
	len=sqrt(n);
	num=ceil(n/len);
	memset(tag,0,sizeof(tag));
	memset(la,0,sizeof(la));
	for(int i=1;i<=num;i++){
		for(int j=(i-1)*len+1;j<=i*len;j++) belong[j]=i;
	}
}
		
void change(int l,int r){
	if(belong[l]==belong[r]){
		for(int i=l;i<=r;i++){
			la[i]=(la[i]+1)%2;
		}
		return;
	}else{
		for(int i=l;i<=belong[l]*len;i++){
			la[i]=(la[i]+1)%2;
		}
		for(int i=belong[l]*len+1;i<=(belong[r]-1)*len;i++){
			tag[i]=(tag[i]+1)%2;
		}
		for(int i=(belong[r]-1)*len+1;i<=r;i++){
			la[i]=(la[i]+1)%2;
		}
		return;
	}
}
		
int chack(int l,int r){
	int ans=0;
	if(belong[l]==belong[r]){
		if(tag[belong[l]]==1){
			for(int i=l;i<=r;i++){
				ans+=(la[i]==0?1:0);
			}	
		}else{
			for(int i=l;i<=r;i++){
				ans+=la[i];
			}
		}
		return ans;
	}else{
		for(int i=l;i<=len*belong[l];i++){
			ans+=(tag[belong[i]]==1?(la[i]==0?1:0):la[i]);
		}
		for(int i=belong[l]*len+1;i<(belong[r]-1)*len;i++){
			ans+=(tag[belong[i]]==1?(la[i]==0?1:0):la[i]);
		}
		for(int i=(belong[r]-1)*len+1;i<=r;i++){
			ans+=(tag[belong[i]]==1?(la[i]==0?1:0):la[i]);
		}
		return ans;
	}
}

signed main(){
	cin>>n>>m;
	init();
	for(int i=0;i<m;i++){
		cin>>c>>a>>b;
		if(c==0){
			change(a,b);
			for(int i=1;i<=n;i++) cout<<la[i]<<" ";
			cout<<endl;
		}else{
			cout<<chack(a,b)<<endl;
		}
	}
	return 0;
}
2023/7/11 15:33
加载中...