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';
        }
    }
}