题目大意
给定一个 01 序列,有如下操作:
- 将区间 $[l,r]$ 上的数 01 翻转。
- 询问第 $i$ 个数的值。
分析
区间操作,单点查询,很自然的想到了差分。
用异或或者加减代替翻转都可以,用树状数组维护。我选择了加减,这样询问时对 $2$ 取余即可。
#include "template/ds/fwtree/0.hpp"
int main() {
int n = rr(), m = rr();
fwtree_1<int> tr(n + 2);
while (m--) {
int t = rr();
if (t == 1) {
int l = rr() + 1, r = rr() + 1;
tr.modify(l - 1, -1), tr.modify(r, 1);
} else {
int i = rr();
i = tr.query(i);
printf("%d\n", i & 1);
}
}
return 0;
}