题解

【关于F题】如果有和过了暴力对拍但是没有AC的提交的话 请牛客或洛谷私信我(本人洛谷uid 124721 用户名:Ynoi)
A:

直接模拟,维护所有消息中连续水了多少条和每个人连续水了多少条即可。

B:

考虑贪心。对于某个位置,如果后面的操作完全相同,那么显然这个数越大,最终结果也越大。所以我们每次操作都尽可能让小 Y 实力值最大化。 注意到小 Y 实力值可能会很大,考虑因为,当小 Y的实力值大于 时,如果 时,选择乘 b_i 肯定是更优的,就不用比较了。

C:

按照 r 从小到大排序,然后尽可能往前放。 因为所有 x 都不同,所以这样对后面的区间影响最小。

D:

考虑换根dp。

先任意选一个点为根。

首先定义f_i表示以i为根的子树 必须选节点i的连通块个数。

sf_i表示 i的子树内所有节点f_i之和。

那么(s是i的子节点)(每个子树可以选择包含s的连通块或者为空)。

然后假设断的是x,y的边,xy的父节点。那么y所在树的答案就是sf_y

x所在树 定义 g_y表示假设以y为根,y 在原来的父亲 x所在子树包含x的连通块个数之和。 那么(s是 x 除了 y 之外的子节点)。然后类似sf维护sg,那么sg_y 就是 x所在的子树的答案了。

注意在计算 请不要将所有乘起来之后再 乘 ,因为 可能是 998244353 的倍数。

E:

由于数据是随机的,我们考虑对于询问l,r,p,我们从 往下枚举,判断对应的数是否在区间l,r中,如果是就停止枚举,此数即为最值。

期望复杂度证明如下

序列内随机一个数一个长度为m的区间的概率为

所以期望枚举

长度随机出长度为m的区间的概率为

所以单次询问枚举的期望次数就是

所以单次询问期望枚举O(logn)

F:

先说wlwzgkd的判断。

1、2 算 , 3、4操作算 那么询问l,r就是求是否存在一个使得 。 然后我们设c的前缀和为s,那么求出s中的最小值减去0的大小关系即可。

之后的分析都是针对没有pop空deque的情况。

先假设是对于两个栈进行操作。(即假设3操作仅pop1操作进来的,4操作仅pop2操作进来的) 假设这两个栈为S,T(S是操作1,3的,T是操作2,4的)。

那么,我们先搞出一个匹配序列(就求出一个1操作是被哪个3操作pop 24操作同理)。

然后当我们询问l,r的时候,我们会发现有若干个操作是失配的。

先上结论,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操作。

知道这个结论之后 随便搞个数据结构(比如树套树)维护一下就可以了
全部评论
D题完全没想到还会出现*0的情况,对着代码看了一年
1 回复
分享
发布于 2022-09-02 21:51 湖北
tql!
点赞 回复
分享
发布于 2022-09-02 21:56 广东
滴滴
校招火热招聘中
官网直投
E题的思想其实跟某道lxl题挺像
点赞 回复
分享
发布于 2022-09-02 22:15 山东

相关推荐

3 收藏 评论
分享
牛客网
牛客企业服务