为啥超时??
查看原帖
为啥超时??
1420163
HUC_fishfish楼主2025/1/5 09:26
#include<bits/stdc++.h>
using namespace std;
int n,m,c,l,r,t;
int L[352],R[352],pos[100002],add[352],sum[352],a[100002],ans;
int read(){
	int x=0,f=0;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=1;
		c=getchar();
	}
	while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
	return f?-x:x;
}
inline void out(int a){
	if(a>=10)out(a/10);
	putchar(a%10+'0');
}
int main(){
	n=read(),m=read();
	t=sqrt(n);
	for(int i=1;i<=t;++i) L[i]=R[i-1]+1,R[i]=i*t;
	if(R[t]<n) ++t,L[t]=R[t]+1,R[t]=n;
	for(int i=1;i<=t;++i) for(int j=L[i];j<=R[i];++j) pos[j]=i;
	while(m--){
		c=read(),l=read(),r=read();
		if(c){
			//ask
			ans=0;
			if(pos[l]==pos[r]) for(int i=l;i<=r;++i) ans+=a[i]^add[pos[i]];
			else{
				for(int i=l;i<=R[pos[l]];++i) ans+=a[i]^add[pos[i]];
				for(int i=pos[l]+1;i<pos[r];++i) ans+=(add[i]?((R[i]-L[i]+1)-sum[i]):sum[i]);
				for(int i=L[pos[r]];i<=r;++i) ans+=a[i]^add[pos[i]];
			}
			out(ans);
			printf("\n");
		}else{
			//add
			if(pos[l]==pos[r]) for(int i=l;i<=r;++i) sum[pos[i]]+=(a[i]^1)-a[i],a[i]^=1;
			else{
				for(int i=l;i<=R[pos[l]];++i) sum[pos[i]]+=(a[i]^1)-a[i],a[i]^=1;
				for(int i=pos[l]+1;i<pos[r];++i) add[i]^=1;
				for(int i=L[pos[r]];i<=r;++i) sum[pos[i]]+=(a[i]^1)-a[i],a[i]^=1;
			}
		}
	}
	return 0;
}
2025/1/5 09:26
加载中...