1.动态最大连续和(LA3938-蓝书p201)

题意:给出一个长度为n的整数序列D,你的任务是对m个询问作出回答。对于询问(a,b),需要找到两个下标x和y,使得a\leq x\leq y \leq b,并且D_{x}+D_{x+1}+...+D_{y}尽量大。如果有多组满足条件的x和y,x应该尽量小。如果还有多解,y应该尽量小。

思路:线段树。每个结点维护最大连续和(max_sub)、最大前缀和(max_prefix)、最大后缀和(max_suffix),对于每个询问l,r,在线段树上查询即可。

2.楼房重建(洛谷p4198)

题意:有一排从左到右 n 个楼房,其中第 i 个楼房的底部位于 (i,0) 处。一开始所有楼房的高度都是 0。有一个人在 (0,0) 处看这些楼房,一个底部在 (i,0),并且高度为 h_{i}的楼房能够被看到,当且仅当从 \left (0,0 \right )\left (i,h_{i} \right ) 的连线段不与任意一个楼房严格相交。现在一共过了 m 天,每一天都会有某一个楼房的高度发生改变,求每一天这个人能够看到多少个楼房。n,m ≤ 10^5 。

思路:线段树。维护最长前缀递增长度和区间最大值,单次查询/修改复杂度为O(logn)

3.序列染色

题意:有一个长度为 n 的序列,一开始每个元素都是白色。需要支持两种操作,每种操作是下列两个之一:
▶ 询问第 i 个元素左边第一个白色元素的位置,或者输出不存在。
▶ 将区间 [l,r] 当中所有元素全部染黑。
n,m ≤ 10^5 。

思路:将前方的白色元素作为代表元,一段黑色区间作为一个集合,并入并查集即可。

3.1.鬼子进村

题意:

县城里有n个用地道相连的房子,第i个只与第i-1和第i+1个相连。这是有m个消息依次传来

1、消息为D x:鬼子将x号房子摧毁了,地道被堵上。

2、消息为R :村民们将鬼子上一个摧毁的房子修复了。

3、消息为Q x:有一名士兵被围堵在x号房子中。

李云龙收到信息很紧张,他想知道每一个被围堵的士兵能够到达的房子有几个。

思路:由于存在恢复操作,不能直接用并查集维护。