求助,玄学错误
查看原帖
求助,玄学错误
720078
zzczzczzc楼主2022/11/12 13:58
#include <bits/stdc++.h>
using namespace std;
const int MAXN=2e5+1;

int n,m,op,li,ri,t[MAXN<<2],xx,a[MAXN];
char ch,c;
inline int read(){
    xx=0,c=getchar();
    while (c<'0'||c>'9') c=getchar();
    while (c>='0'&&c<='9') xx=xx*10+c-'0',c=getchar();
    return xx;
}
inline int lc(int i){
    return i<<1;
}
inline int rc(int i){
    return i<<1|1;
}
inline void update(int i){
    t[i]=t[lc(i)]+t[rc(i)];
}
void build(int l,int r,int i){
    if(l==r){
        t[i]=a[l];
        return;
    }
    int mid=(l+r)>>1;
    build(l,mid, lc(i));
    build(mid+1,r, rc(i));
    update(i);
}
void change(int l,int r,int i,int x,int y){
    if(l==r){
        t[i]=1-t[i];
        return;
    }
    int mid=(l+r)>>1;
    if(x<=mid)change(l,mid, lc(i),x,y);
    if(y>mid)change(mid+1,r, rc(i),x,y);
    update(i);
}
int query(int l,int r,int i,int x,int y){
    int ans=0;
    if(l>=x&&r<=y){
        return t[i];
    }
    int mid=(l+r)>>1;
    if(x<=mid)ans+= query(l,mid, lc(i),x,y);
    if(y>mid)ans+= query(mid+1,r,rc(i),x,y);
    return ans;
}
int main(){
    n=read(),m=read();
    for(int i=1;i<=n;++i){
        cin>>ch;//ch=getchar();
        a[i]=ch-'0';
    }
    build(1,n,1);
    for(int i=3;i<=m+2;++i){
        op=read(),li=read(),ri=read();
        if(op==0){
            change(1,n,1,li,ri);
        }else{
            printf("%d\n", query(1,n,1,li,ri));
        }
    }
    return 0;
}

这是一份60pts的代码 如果把里面的cin>>ch改成ch=getchar()就会爆零 但是本蒟蒻本地编译可以过样例和测试点,为什么提交不给过?

2022/11/12 13:58
加载中...