题目大意

给定一个 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;
}