树套树.
手玩一下可以发现,这种写法中, ${\rm Add}(x)$ 对 ${\rm Find}(y)$ 有贡献,当且仅当 $y\ge x$ .
于是 $\rm Add$ 是单点修改, $\rm Find$ 是查询后缀和.
记 $sum(l,r)$ 表示 $[l,r]$ 区间内所有数的异或和.
因为 $\rm Find$ 特判了 $l=0$ ,所以对于每次询问 ${\rm Query}(l,r) $ 要分情况讨论.
当 $l=1$ 时,答案正确需要满足 $sum(1,r)=sum(r,n)$ ,即 $sum(1,n)=sum(r)$ .
而 $sum(1,n)$ 已知,需要查询 $r$ 被修改次数为奇/偶的概率.
当 $l\neq 1$ 时,答案正确需要满足 $sum(l,r)=sum(l-1,n)\oplus sum(r,n)$ ,即 $sum(l-1)=sum(r)$ .
需要查询 $l-1,r$ 这两个位置修改总次数为偶数的概率.
因为每次修改时,区间内的两个位置不可能同时被修改,所以不能简单的维护每个位置被修改奇/偶次的概率.
而是需要对于每个点对 $(l,r)$ ,维护它们修改总次数为奇/偶次的概率.
每个点对是二维平面上的一个点,每次修改一个矩形内的点权,查询单点的权值,这可以用标记永久化的树套树维护.
查询 $r$ 被修改次数为奇/偶的概率可以看成是查询 $(0,r)$ 这个点对修改总次数为奇/偶的概率,就不用另外维护了.
时间复杂度 $O(n+m\log^2 n)$ ,空间复杂度 $O(n\log^2 n)$ .
1 | //%std |