题目:http://poj.org/problem?id=2777
题意:有长为L的格子,初始颜色为 1,有T种颜料,两种操作,共操作O次,如 “C 1 2 2”表示区间 [1,2] 涂颜料2,“P 1 3”表示询问区间 [1,3] 有几种不同的颜色。
思路:格子的颜色为 i ,则用 1 << i 来表示 。父节点的值为两个子节点进行或运算后的值。那么最后只需要对每一段对应区间的二进制的值全部 进行或运算后 ,最后再看这个二进制数中含几个 1 就是答案了。
本题两种操作输入的区间不一定L<=R,所以要判断并swap;最后的答案 不是每个符合条件(即&&
)的子区间都算出二级制中包含几个 1 并相加,那样颜色很可能会重复(代码后面的样例可以一试)。
心得:通过本题对 懒标记 lzx 有了进一步的认识。引用书中两段话&#x