这是我的代码,交上去全WA了,下载第一个测试点后,我的输出与答案一样,但是WA了,大佬们帮忙看一下呗
#include <bits/stdc++.h>
#define ls x<<1
#define rs x<<1|1
using namespace std;
inline int gin(){
	char c=getchar();
	int s=0,f=1;
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		s=(s<<3)+(s<<1)+(c^48);
		c=getchar();
	}
	return s*f;
}
int n,m,a[200001];
long long t[800005],sum[800005];
void pushup(int x){
	sum[x]=sum[ls]+sum[rs];
}
void build(int x,int l,int r){
	if(l==r){
		sum[x]=a[l];
		return;
	}
	int mid=l+r>>1;
	build(ls,l,mid);
	build(rs,mid+1,r);
	pushup(x);
}
void pushdown(int x,int len){
	if(t[x]){
		t[ls]^=1;
		t[rs]^=1;
		sum[ls]=(len-(len>>1))-sum[ls];
		sum[rs]=(len>>1)-sum[rs];
		t[x]=0;
	}
}
void change(int x,int l,int r,int L,int R){
	pushdown(x,r-l+1);
	if(l>=L && r<=R){
		t[x]^=1;
		sum[x]=r-l+1-sum[x];
		return;
	}
	int mid=l+r>>1;
	if(L<=mid)change(ls,l,mid,L,R);
	if(R>=mid+1)change(rs,mid+1,r,L,R);
	pushup(x);
}
long long query(int x,int l,int r,int L,int R){
	if(l>=L && r<=R){
		return sum[x];
	}
	pushdown(x,r-l+1);
	int mid=l+r>>1;
	long long ans=0;
	if(L<=mid)ans+=query(ls,l,mid,L,R);
	if(R>=mid+1)ans+=query(rs,mid+1,r,L,R);
	return ans;
}
int main(){
	n=gin(),m=gin();
	for(int i=1;i<=n;i++){
		int c=getchar();
		a[i]=c-'0';
	}
	build(1,1,n);
	while(m--){
		int op=gin(),l=gin(),r=gin();
		if(op==0){
			change(1,1,n,l,r);
		}
		else printf("%lld\n",query(1,1,n,l,r));
	}
	return 0;
}