20200229
uoj76(dp,图论)
【GDOI2020模拟01.18】加减(闵可夫斯基和,分治)
法1:线段树,也是csacademy官方题解做法。
注意到$x+2$的解由$x$添加$2$个数得来(不会证明),于是可以使用线段树寻找对答案贡献最大的$2$个数并且删去。速度较慢。
法2:分治。注意到左右两端的最优解在加新的一边以后只会浮动2个数。于是可以使用分治计算。
法3:闵可夫斯基和+分治。考虑一下左边的最优解数组$a$和右边的最优解数组$b$,问题转化为$(\max,+)$卷积。
(实际上由于左边/右边的选出的数的数量的奇偶性,卷积不一定是$(\max,+)$卷积,但是并不影响)
这个卷积的低于$O(n^2)$算法没有被发现,但是这道题有特殊性,函数是分奇偶凸的。
于是可以分最大/最小值,合并正/负凸壳。这个合并可以使用闵可夫斯基和完成。
具体来说,每次比较2个指针端那个更好,然后移动指针即可。
证明可以使用反证法。(先咕)
【GDOI2020模拟02.07】矩阵(dp,ntt)
20200301