T1:
区间很大,但是最优位置可能出现的地方不超过$2n$个。
可以将区间端点及最优值可能出现的位置离散化,即每个区间的$l$、$r$和$r+1$,连同$1$一起离散化。
然后线段树维护就即可。
要同时维护最左侧的$0$和$1$,当前区间是否全为$1$或全为$0$。
修改时如果是区间赋值,直接覆盖答案及懒标记。
如果是区间反转,交换最左侧的$0$和$1$的位置,同时反转区间状况和懒标记。
查询最左侧的$0$即可。
时间复杂度$O(nlogn)$。
T2:
将物品分成4类:甲喜欢,乙喜欢,都喜欢和都不喜欢。
将每种情况排序,然后枚举都喜欢的选了多少个。
那么甲乙分别喜欢的都要选上最小的几个,是的每个人喜欢的总数等于k。
然后将剩下所有的东西装进线段树里,查询前几小值之和。
线段树要动态增删维持复杂度。
时间复杂度$O(nlogn)$。
T3:
对每个点进行如下操作:
倒序枚举每一条边没,初始时集合中只有自己。
如果两点都在集合中,当前点一定被吃掉,结束返回;
如果其中一个点在集合中,扩大集合;
如果两个点都不在集合中,什么影响也没有,继续递归。
递归到最后,则该点可以存活。
这是的集合代表当前点存活的情况下需要替它被吃的点。
枚举两个点,如果两个点的集合有交集,则不能同时存活,反之能。
时间复杂度$O(nm)$。
原文地址:https://www.cnblogs.com/hz-Rockstar/p/11619517.html
时间: 2024-10-09 06:24:19