萌新求助,IDE的神奇逻辑
查看原帖
萌新求助,IDE的神奇逻辑
114082
Sya_Resory楼主2020/7/5 14:18

RT 这个程序本地(VSC)测试样例是对的,但到IDE上测样例会得到一个奇怪的59 求助是什么问题QWQ

#include <cstdio>
#define maxn 200005

struct node {
    int lazy,lft,rgt,data;
    node() {}
    inline int len() { return rgt - lft + 1; }
    inline int mid() { return rgt + lft >> 1; }
} t[maxn << 2];
int a[maxn],n,m;

inline int read() {
#define gc c = getchar()
    int d = 0,f = 0,gc;
    while(c < 48 || c > 57) f |= (c == '-'),gc;
    while(c > 47 && c < 58) d = (d << 1) + (d << 3) + (c ^ 48),gc;
#undef gc
    return f ? -d : d;
}

inline int ls(int p) { return p << 1; }
inline int rs(int p) { return p << 1 | 1; }
inline void push_up(int p) { t[p].data = t[ls(p)].data + t[rs(p)].data; }

inline void push_down(int p) {
    if(t[p].lazy) {
        t[ls(p)].lazy ^= 1;
        t[rs(p)].lazy ^= 1;
        t[ls(p)].data = t[ls(p)].len() - t[ls(p)].data;
        t[rs(p)].data = t[rs(p)].len() - t[rs(p)].data;
        t[p].lazy = 0;
    }
}

void build(int p,int l,int r) {
    t[p].lft = l,t[p].rgt = r;
    if(l == r) { t[p].data = a[l]; return ; }
    int mid = l + r >> 1;
    build(ls(p),l,mid);
    build(rs(p),mid + 1,r);
    push_up(p);
}

void modify(int p,int l,int r) {
    if(l <= t[p].lft && r >= t[p].rgt) {
        t[p].data = t[p].len() - t[p].data;
        t[p].lazy ^= 1;
        return ;
    }
    push_down(p);
    int mid = t[p].mid();
    if(l <= mid) modify(ls(p),l,r);
    if(r > mid) modify(rs(p),l,r);
    push_up(p);
}

int query(int p,int l,int r) {
    if(l <= t[p].lft && r >= t[p].rgt) return t[p].data;
    push_down(p);
    int mid = t[p].mid(),ans = 0;
    if(l <= mid) ans += query(ls(p),l,r);
    if(r > mid) ans += query(rs(p),l,r);
    return ans;
}

int main() {
    n = read(),m = read();
    for(register int i = 1;i <= n;i ++) a[i] = getchar() ^ 48;
    build(1,1,n);
    for(;m;m --) {
        register int op = read(),l = read(),r = read();
        if(op == 0) modify(1,l,r);
        if(op == 1) printf("%d\n",query(1,l,r));
    } 
    return 0;
}
2020/7/5 14:18
加载中...