十分,看不出来错误啊
查看原帖
十分,看不出来错误啊
836104
cxlian25楼主2023/1/2 20:44
#include <bits/stdc++.h>
#define lx (x<<1)
#define rx (x<<1|1)
#define mid (l+r>>1)
using namespace std;
const int N=2e5+3;
char a[N];
int n,m,st[N<<2];
bool lazy[N<<2];

void build(int x,int l,int r){
    if(l==r){
        st[x]=a[l]-'0';
        return ;
    }
    build(lx,l,mid);
    build(rx,mid+1,r);
    st[x]=st[lx]+st[rx];
}
void up(int x,int l,int r){
    st[x]=r-l+1-st[x];
    lazy[x]=1;
}
void down(int x,int l,int r){
    if(lazy[x])up(lx,l,mid),up(rx,mid+1,r);
    lazy[x]=0;
}
void bian(int x,int l,int r,int sl,int sr){
    if(sr<l||sl>r)return ;
    if(sl<=l&&sr>=r){
        up(x,l,r);
        return ;
    }
    down(x,l,r);
    bian(lx,l,mid,sl,sr);
    bian(rx,mid+1,r,sl,sr);
    st[x]=st[lx]+st[rx];
}
int query(int x,int l,int r,int sl,int sr){
    if(sr<l||sl>r)return 0;
    if(sl<=l&&sr>=r)return st[x];
    down(x,l,r);
    return query(lx,l,mid,sl,sr)+query(rx,mid+1,r,sl,sr);
}
int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    build(1,1,n);
    while(m--){
        int t,x,y;cin>>t>>x>>y;
        if(t==0)bian(1,1,n,x,y);
        else printf("%d\n",query(1,1,n,x,y));
    }
    return 0;
}
2023/1/2 20:44
加载中...