这是我的代码,交上去全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;
}