Submission
Status:
PPPPPPPPPPP
Subtask/Task Score:
100/100
Score: 100
User: Korrawee
Problemset: เปิดไฟ
Language: cpp
Time: 0.051 second
Submitted On: 2026-04-06 10:07:41
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int seg[4*N], lazy[4*N];
void push(int node, int l, int r) {
if (!lazy[node]) return;
seg[node] = (r - l + 1) - seg[node]; // flip
if (l != r) {
lazy[node*2] ^= 1;
lazy[node*2+1] ^= 1;
}
lazy[node] = 0;
}
void update(int node, int l, int r, int ql, int qr) {
push(node, l, r);
if (r < ql || l > qr) return;
if (ql <= l && r <= qr) {
lazy[node] ^= 1;
push(node, l, r);
return;
}
int mid = (l + r) >> 1;
update(node*2, l, mid, ql, qr);
update(node*2+1, mid+1, r, ql, qr);
seg[node] = seg[node*2] + seg[node*2+1];
}
int query(int node, int l, int r, int ql, int qr) {
push(node, l, r);
if (r < ql || l > qr) return 0;
if (ql <= l && r <= qr) return seg[node];
int mid = (l + r) >> 1;
return query(node*2, l, mid, ql, qr) +
query(node*2+1, mid+1, r, ql, qr);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
while (m--) {
int op, l, r;
cin >> op >> l >> r;
if (op == 0) {
update(1, 1, n, l, r);
} else {
cout << query(1, 1, n, l, r) << '\n';
}
}
}