模拟测试55

T1:

  区间很大,但是最优位置可能出现的地方不超过$2n$个。

  可以将区间端点及最优值可能出现的位置离散化,即每个区间的$l$、$r$和$r+1$,连同$1$一起离散化。

  然后线段树维护就即可。

  要同时维护最左侧的$0$和$1$,当前区间是否全为$1$或全为$0$。

  修改时如果是区间赋值,直接覆盖答案及懒标记。

  如果是区间反转,交换最左侧的$0$和$1$的位置,同时反转区间状况和懒标记。

  查询最左侧的$0$即可。

  时间复杂度$O(nlogn)$。

T2:

  将物品分成4类:甲喜欢,乙喜欢,都喜欢和都不喜欢。

  将每种情况排序,然后枚举都喜欢的选了多少个。

  那么甲乙分别喜欢的都要选上最小的几个,是的每个人喜欢的总数等于k。

  然后将剩下所有的东西装进线段树里,查询前几小值之和。

  线段树要动态增删维持复杂度。

  时间复杂度$O(nlogn)$。

T3:

  对每个点进行如下操作:
    倒序枚举每一条边没,初始时集合中只有自己。

    如果两点都在集合中,当前点一定被吃掉,结束返回;

    如果其中一个点在集合中,扩大集合;

    如果两个点都不在集合中,什么影响也没有,继续递归。

    递归到最后,则该点可以存活。

  这是的集合代表当前点存活的情况下需要替它被吃的点。

  枚举两个点,如果两个点的集合有交集,则不能同时存活,反之能。

  时间复杂度$O(nm)$。

posted @ 2019-10-03 12:14  hz_Rockstar  阅读(161)  评论(1编辑  收藏  举报