唉
凸序列 (min,+) 卷积后还是凸的。
谁的哀鸣在指引?
这里应当有一些锐评,可能会在不知道什么时候补上。
A.魔法少女
不会做,队友太强了。
B.栈
注意到只需保留栈顶的 \(O(n)\) 个数即可。
add(sum,-q.back)
,获得一堆罚时,望周知。
C.炉石传说
写成一元二次方程的形式,根据顶点式 \((-\frac b{2a},\frac{4ac-b^2}{4a})\),分类讨论一下即可。
D.找方向
直接做。
E.简单题
任取 \(n\) 个不同质数 \(p_1,p_2,\dots,p_n\),注意到 \(p_i\times i\) 是一组合法的构造。
F.贪吃蛇
不会做。
G.叠叠乐
注意到最多放 \(\log\) 个数,直接做即可。
H.寄存器
不想读题。
I.双线程执行器
很好啊!
按照价值从小到大排序,\(f_{i,j}\) 表示前 \(i\) 组 \(j\) 个尚未匹配的代价。关键性质是 \(f_i\) 关于 \(j\) 具有单调性,
后面先咕一下,总之推一下然后可以单调队列优化!
J.博弈
注意到若能取胜,必然会在一个回合内取胜。
K.等价交换
注意到答案为 \(\max(n-m,1)\)。
L.红黑树
现场赛过了 19 个队,ucup 过了 109 个队。
首先考虑暴力 dp,\(f_{i,j}\) 代表 \(i\) 的子树内每条 \(i\to leaf\) 的路径都有 \(j\) 个黑点的方案数。转移的形式比较漂亮,是子树做点乘,启发人去往线段树合并之类的东西上去想,不过加入子树根这个步骤用线段树合并没法维护。注意到数组长度为子树深度,考虑长链剖分,刘海峰论文中指出了经典结论,所有短儿子的高度和是 \(O(n)\) 的。所以长链剖分后对于所有儿子暴力合并 dp 数组的复杂度是 \(O(n)\) 的。但是注意到如果一个点只有一个儿子,那么这个复杂度就会被破坏。
只有一个儿子的点的答案等于其儿子的答案,因此考虑不对这个点处理出 dp 数组。等到需要用的时候直接利用其儿子的信息,这样查询在进行 \(v_i\leftarrow v_i+i\) 的套路处理后等价于查询 rmq,倍增处理即可。注意到除此之外,还需要把每条长链的链顶都处理好,时间复杂度 \(O(n\log n)\)。
注意到上文没有利用到长链剖分的任何性质,所以直接瞎剖分即可。
南京站的官方题解利用 dp 数组的凸性做到线性,非常好写,不过无所谓了。