2024.11.25总结
A:
限制等价于位置 的所有可能情况平均值均大于等于整体平均值,用个双指针模拟即可。
无解情况是不存在的。
B:
使用优惠卷而 未使用,若想让 的优惠卷给 用,需要满足 。
然后我们每次找到一个原价/优惠价的最小值,与选择使用优惠卷的物品比较,判断是否替换即可。
C:
非常好NOIP模拟赛,使我默写lct
首先考虑一个实链(从浅到深),容易发现一定是这个节点里最晚被操作的,其他的节点之间顺序随意。然后考虑的父亲 所在实链的链底 , 一定比 早操作。于是可以建一棵树,非链底向对应链底连边,链底向父亲链的链底连边,这样每个点在新树上的父亲的操作顺序一定比当前点早。
于是变成了这个问题:有一颗树,求有多少排列满足。这个问题可以简单的树形 dp 得到一个式子 。
考虑这个问题在我们重构树上的组合意义。首先非链底节点的 都是,链底节点对应的是所在实链链顶在原树中的。因此答案即为,其中表示链顶集合,表示在原树上的子树大小。为了维护集合,可以用 lct 或 树剖的方法做到1log。这里介绍树剖的方法。
考虑每次access对于树剖上一条重链的影响是:一个前缀的链顶被清空了,然后前缀的末尾加入。于是每条重链可以用一个栈维护,栈顶是浅的点,每次只会在栈顶做push和pop操作,均摊复杂度。
D:
什么 b 玩意。
考虑对问题做如下转化:随机一个排列,第次操作删除的倍数,但如果已经被删除则不计入次数。
由期望线性性,答案是每个被记入次数的概率之和。也就是与其因子们,是在排列里第一个出现的概率,也就是,其中是的因子个数。
令,容易发现是积性函数,可以线性筛,获得部分分。也可以min25/洲阁筛。总之选取你喜欢的筛子,可以得到或之类的复杂度。