Submission

Status:
PPPPPPPPPPP

Score: 100

User: Pianist

Problemset: เปิดไฟ

Language: cpp

Time: 0.057 second

Submitted On: 2024-11-07 21:36:31

#include<iostream>
#include<vector>

using namespace std;

struct ST {
    int n;
    vector<int> sg, lz;
    ST(int sz): n(sz), sg(n<<2|1), lz(n<<2|1){}
    void psh(int i, int l, int r){
        if(lz[i]){
            sg[i]=r-l+1-sg[i];
            if(l<r){
                lz[i<<1]^=1;
                lz[i<<1|1]^=1;
            }
            lz[i]=0;
        }
    }
    void upd(int i, int ql, int qr, int l, int r){
        psh(i, l, r);
        if(l>qr || r<ql) return;
        if(l>=ql && r<=qr){
            lz[i]^=1;
            psh(i, l, r);
            return;
        }
        int m = l+r>>1;
        upd(i<<1, ql, qr, l, m);
        upd(i<<1|1, ql, qr, m+1, r);
        sg[i]=sg[i<<1]+sg[i<<1|1];
    }
    int qry(int i, int ql, int qr, int l, int r){
        psh(i, l, r);
        if(l>qr || r<ql) return 0;
        if(l>=ql && r<=qr) return sg[i];
        int m = l+r>>1;
        return qry(i<<1, ql, qr, l, m)+qry(i<<1|1, ql, qr, m+1, r);
    }
};

int main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    int n,q;
    cin >> n >> q;
    ST f(n);
    while(q--){
        int op, l, r;
        cin >> op >> l >> r;
        if(op) cout << f.qry(1, l, r, 1, n) << "\n";
        else f.upd(1, l, r, 1, n);
    }

    return 0;
}