Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 1e5;
- int n;
- int st[4 * N], com[4 * N];
- void update(int x, int y, int id, int l, int r)
- {
- if (r <= l || r <= x || y <= l) return;
- if (x <= l && r <= y) {
- ++com[id];
- st[id] = r-l-st[id];
- }
- else {
- int mid = (l+r) / 2;
- update(x, y, 2*id+1, l, mid);
- update(x, y, 2*id+2, mid, r);
- st[id] = st[2*id+1] + st[2*id+2];
- if (com[id] % 2 == 1)
- st[id] = r-l-st[id];
- }
- }
- int get(int x, int y, int id, int l, int r)
- {
- if(r <= l || r <= x || y <= l)
- return 0;
- if(x <= l && r <= y)
- return st[id];
- int mid = (l+r) / 2;
- int res = get(x, y, 2*id+1, l, mid) + get(x, y, 2*id+2, mid, r);
- return com[id] % 2 == 0 ? res : min(r, y) - max(l, x) - res;
- }
- int main()
- {
- int q; cin >> n >> q;
- while (q-- > 0) {
- int t, x, y;
- cin >> t >> x >> y;
- if (t == 0)
- update(x-1, y, 0, 0, n);
- else {
- cout << get(x-1, y, 0, 0, n);
- cout << '\n';
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment