- [TJOI2009] 开关
111
- 2024-12-20 20:10:30 @
#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