poj 2777 Count Color (线段树+利用二进制存储不同状态,涂色,求区间不同颜色种数)

该博客介绍了POJ 2777题目的解题思路,涉及线段树和利用二进制状态来表示颜色。题目要求处理涂色和查询区间内不同颜色种类的操作。博主指出,对于跨越线段树节点的区间,需要交换边界并使用懒标记避免重复计数。在处理查询时,应将所有子区间进行或运算,然后计算二进制表示中1的个数作为答案。此外,博主分享了通过此题对懒标记的理解和应用加深。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目: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;最后的答案 不是每个符合条件(即L\leqslant l&&r\leqslant R)的子区间都算出二级制中包含几个 1 并相加,那样颜色很可能会重复(代码后面的样例可以一试)。

 

心得:通过本题对 懒标记 lzx 有了进一步的认识。引用书中两段话&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值