为什么Windows环境下正确,Linux环境下错误?
查看原帖
为什么Windows环境下正确,Linux环境下错误?
214853
Mecci_miaowu楼主2021/6/19 11:24
#include<bits/stdc++.h>
using namespace std;
#define reg register
#define gc getchar()
typedef long long ll;

inline ll read(){
    reg ll res = 0, k = 1;
    reg char ch = gc;
    while(ch < '0' || ch > '9'){
        if(ch == '-')
            k = -1;
        ch = gc;
    }
    while(ch >= '0' && ch <= '9'){
        res = res * 10 + ch - '0';
        ch = gc;
    }
    return res * k;
}

int n, m;
int s[200000 + 5];
int tree[200000 * 4 + 5];
bool del[200000 * 4 + 5];

inline void build(int id, int l, int r){
    if(l == r){
        tree[id] = s[l];
        return;
    }
    reg int mid = (l + r) >> 1;
    build(id << 1, l, mid);
    build(id << 1 | 1, mid + 1, r);
    tree[id] = tree[id << 1] + tree[id << 1 | 1];
}

inline void lazy(int id, int l, int r){
    if(del[id]){
        int mid = (l + r) >> 1;
        tree[id << 1] = mid - l + 1 - tree[id << 1];
        tree[id << 1 | 1] = r - mid - tree[id << 1 | 1];
        del[id] = 0;
        del[id << 1] ^= 1;
        del[id << 1 | 1] ^= 1;
    }
}

inline void change(int id, int l, int r, int ml, int mr){
    if(ml <= l && r <= mr){
        del[id] ^= 1;
        tree[id] = r - l + 1 - tree[id];
        return;
    }
    if(r < ml || l > mr)
        return;
    lazy(id, l, r);
    int mid = (l + r) >> 1;
    change(id << 1, l, mid, ml, mr);
    change(id << 1 | 1, mid + 1, r, ml, mr);
    tree[id] = tree[id << 1] + tree[id << 1 | 1];
}

inline int query(int id, int l, int r, int ml, int mr){
    if(ml <= l && r <= mr)
        return tree[id];
    if(r < ml || l > mr)
        return 0;
    lazy(id, l, r);
    int mid = (l + r) >> 1;
    return query(id << 1, l, mid, ml, mr) + query(id << 1 | 1, mid + 1, r, ml, mr);
}

int main(){
    n = read(), m = read();
    for(reg int i = 1; i <= n ; ++i)
        s[i] = gc - '0';
    build(1, 1, n);
    while(m--){
        reg int op = read(), l = read(), r = read();
        if(op)printf("%d\n",query(1, 1, n, l, r));
        else change(1, 1, n, l, r);
    }
    return 0;
}
2021/6/19 11:24
加载中...