题解
【关于F题】如果有和过了暴力对拍但是没有AC的提交的话 请牛客或洛谷私信我(本人洛谷uid 124721 用户名:Ynoi)
A:
直接模拟,维护所有消息中连续水了多少条和每个人连续水了多少条即可。
B:
考虑贪心。对于某个位置,如果后面的操作完全相同,那么显然这个数越大,最终结果也越大。所以我们每次操作都尽可能让小 实力值最大化。 注意到小 实力值可能会很大,考虑因为,当小 的实力值大于 时,如果 时,选择乘 肯定是更优的,就不用比较了。
C:
按照 从小到大排序,然后尽可能往前放。 因为所有 都不同,所以这样对后面的区间影响最小。
D:
考虑换根dp。
先任意选一个点为根。
首先定义表示以为根的子树 必须选节点的连通块个数。
表示 的子树内所有节点之和。
那么(s是i的子节点)(每个子树可以选择包含的连通块或者为空)。
然后假设断的是的边, 是 的父节点。那么所在树的答案就是
算所在树 定义 表示假设以为根, 在原来的父亲 所在子树包含的连通块个数之和。 那么(s是 除了 之外的子节点)。然后类似维护,那么 就是 所在的子树的答案了。
注意在计算 请不要将所有乘起来之后再 乘 ,因为 可能是 的倍数。
E:
由于数据是随机的,我们考虑对于询问,我们从 往下枚举,判断对应的数是否在区间中,如果是就停止枚举,此数即为最值。
期望复杂度证明如下
序列内随机一个数一个长度为m的区间的概率为
所以期望枚举次
长度随机出长度为的区间的概率为
所以单次询问枚举的期望次数就是
所以单次询问期望枚举次
F:
先说wlwzgkd的判断。
1、2 算 , 3、4操作算 那么询问就是求是否存在一个使得 。 然后我们设的前缀和为,那么求出s中的最小值减去与的大小关系即可。
之后的分析都是针对没有pop空deque的情况。
先假设是对于两个栈进行操作。(即假设3操作仅pop1操作进来的,4操作仅pop2操作进来的) 假设这两个栈为(S是操作1,3的,T是操作2,4的)。
那么,我们先搞出一个匹配序列(就求出一个1操作是被哪个3操作pop 24操作同理)。
然后当我们询问的时候,我们会发现有若干个操作是失配的。
先上结论,deque内部剩余的节点是 所有失配的操作1、2,删去最前面的x个, x是失配的3,4操作的个数。
(下面是证明)
下文中的前面指的是在opt序列里编号小。
我们考虑对于每个失配的pop操作,比如说是一个3操作 记作u。
那么它会pop掉T里尚存的最前面的那一个2操作。
那么会有如下两种情况:
1.T中pop了一个失配的2操作 那么这个2操作必然在这个3操作的前面 并且S里肯定没有比3更靠前的失配1操作了(不然这俩就匹配了) 那么pop的就是最前面的失配操作了。
2.T中pop了一个没有失配的2操作 那么有一个匹配这个2操作(记作x)的4操作(记作y)。那么T中也没有比y更靠前的失配2操作了(不然 如果比x靠前那么被 就这个操作被u pop了 如果比x靠后那么就和 y匹配了)
然后这个y就只能去匹配x里面的了 相当于一个失配的4操作 那么多次这样来回匹配之后就会发现 最后被pop掉的还是最前面的失配1,2操作。
知道这个结论之后 随便搞个数据结构(比如树套树)维护一下就可以了