Submission
Status:
PPPPPPPPPPP
Score: 100
User: njoop
Problemset: เปิดไฟ
Language: cpp
Time: 0.175 second
Submitted On: 2024-11-27 20:40:15
#include <bits/stdc++.h>
using namespace std;
int n, q, in, m, c, s, e;
struct lzt {
int seg[600010];
bool lz[600010];
void push(int l, int r, int node) {
if(lz[node] == 1) {
seg[node] = (r-l+1)-seg[node];
if(l != r) {
lz[node*2] = !lz[node*2];
lz[node*2+1] = !lz[node*2+1];
}
lz[node] = 0;
}
}
void update(int l, int r, int ul, int ur, int node) {
push(l, r, node);
if(l > ur || r < ul) return;
if(l >= ul && r <= ur) {
lz[node] = !lz[node];
push(l, r, node);
return;
}
int mid = (l+r)/2;
update(l, mid, ul, ur, node*2);
update(mid+1, r, ul, ur, node*2+1);
seg[node] = seg[node*2] + seg[node*2+1];
}
int query(int l, int r, int ql, int qr, int node) {
push(l, r, node);
if(l > qr || r < ql) return 0;
if(l >= ql && r <= qr) return seg[node];
int mid = (l+r)/2;
return query(l, mid, ql, qr, node*2) + query(mid+1, r, ql, qr, node*2+1);
}
};
int main() {
cin >> n >> m;
lzt seg;
while(m--) {
cin >> c >> s >> e;
if(c == 0) {
seg.update(1, n, s, e, 1);
} else {
cout << seg.query(1, n, s, e, 1) << "\n";
}
}
return 0;
}