Submission
Status:
PPPPPPPPPPP
Score: 100
User: Pianist
Problemset: เปิดไฟ
Language: cpp
Time: 0.060 second
Submitted On: 2024-11-07 21:38:54
#include<iostream>
#include<vector>
using namespace std;
struct ST {
int n;
vector<int> sg, lz;
ST(int sz): n(sz), sg(sz<<2|1), lz(sz<<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;
}