1.动态最大连续和(LA3938-蓝书p201)
题意:给出一个长度为n的整数序列D,你的任务是对m个询问作出回答。对于询问(a,b),需要找到两个下标x和y,使得,并且
尽量大。如果有多组满足条件的x和y,x应该尽量小。如果还有多解,y应该尽量小。
思路:线段树。每个结点维护最大连续和(max_sub)、最大前缀和(max_prefix)、最大后缀和(max_suffix),对于每个询问l,r,在线段树上查询即可。
2.楼房重建(洛谷p4198)
题意:有一排从左到右 n 个楼房,其中第 i 个楼房的底部位于 (i,0) 处。一开始所有楼房的高度都是 0。有一个人在 (0,0) 处看这些楼房,一个底部在 (i,0),并且高度为 的楼房能够被看到,当且仅当从
到
的连线段不与任意一个楼房严格相交。现在一共过了 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号房子中。
李云龙收到信息很紧张,他想知道每一个被围堵的士兵能够到达的房子有几个。
思路:由于存在恢复操作,不能直接用并查集维护。