分块WA求调
查看原帖
分块WA求调
1487555
Ruizhilu楼主2025/7/23 15:24
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+7;
bool a[N],add[N]; int b_siz;
int n,m;

void change(int l,int r){
	int lb=(l-1)/b_siz,rb=(r-1)/b_siz;
	if(lb==rb){
		for(int i=l;i<=r;i++)
			a[i]=!a[i];
	}else{
		for(int i=l;i<=(lb+1)*b_siz&&i<=n;i++) a[i]=!a[i];
		for(int b=lb+1;b<rb;b++) add[b]^=1;
		for(int i=rb*b_siz+1;i<=r&&i<=n;i++) a[i]=!a[i];
	}
}

int query(int l,int r){
	int lb=(l-1)/b_siz,rb=(r-1)/b_siz;
	if(lb==rb){
		int cnt=0;
		for(int i=l;i<=r;i++)
			cnt+=(a[i]^add[lb]);
		return cnt;
	}else{
		int cnt=0;
		for(int i=l;i<=(lb+1)*b_siz&&i<=n;i++) 
			cnt+=(a[i]^add[lb]);
		for(int b=lb+1;b<rb;b++){
			if(add[b])
				cnt+=b_siz;
		}
		for(int i=rb*b_siz+1;i<=r&&i<=n;i++) 
			cnt+=(a[i]^add[rb]);
		return cnt;
	}
	return -1;
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	memset(a,0,sizeof(a));
	memset(add,0,sizeof(add));
	cin>>n>>m;
	b_siz=sqrt(n)+1;
	while(m--){
		int op,l,r;
		cin>>op>>l>>r;
		if(op==0) change(l,r);
		else cout<<query(l,r)<<'\n';
	}
	return 0;
}
2025/7/23 15:24
加载中...