#include<iostream>
using namespace std;
int d[(int)5e5], f[(int)5e5];

void pushdamn(int s, int t, int p) {
	int mid = (s + t) >> 1;
	d[p * 2] = (mid - s + 1) - d[p * 2];
	f[p * 2] = !f[p * 2];
	d[p * 2 + 1] = (t - mid) - d[p * 2 + 1];
	f[p * 2 + 1] = !f[p * 2 + 1];
	f[p] = 0;
	return ;
}

void update(int l, int r, int s, int t, int p) {
	if (l <= s && t <= r) {
		f[p] = !f[p];
		d[p] = (t - s + 1) - d[p];
		return;
	}
	if (f[p] && s != t) {
		pushdamn(s, t, p);
	}
	int mid = (s + t) >> 1;
	if (l <= mid)update(l, r, s, mid, p * 2);
	if (mid < r)update(l, r, mid + 1, t, p * 2 + 1);
	d[p] = d[p * 2] + d[p * 2 + 1];
}

int getsum(int l, int r, int s, int t, int p) {
	if (l <= s && t <= r) {
		return d[p];
	}
	pushdamn(s, t, p);
	int mid = (s + t) >> 1;
	int sum = 0;
	if (l <= mid)sum += getsum(l, r, s, mid, p * 2);
	if (mid < r)sum += getsum(l, r, mid + 1, t, p * 2 + 1);
	return sum;
}

int main() {
	int n, m;
	cin >> n >> m;
	while (m--) {
		int c, a, b;
		cin >> c >> a >> b;
		if (c == 0) {
			update(a, b, 1, n, 1);
cout << "\nd:";
for (int i=1;i<=4*n;i++){
	cout << d[i] << " ";
}
cout << "\nf:";
for (int i=1;i<=4*n;i++){
	cout << f[i] << " ";
}
cout << "\n";
		} else {
			cout << getsum(a, b, 1, n, 1) << "\n";
		}
	}




	return 0;
}

0 comments

No comments so far...

Information

ID
286
Time
1000ms
Memory
256MiB
Difficulty
6
Tags
# Submissions
34
Accepted
12
Uploaded By