NOIP%5B
~我这水平……就不发题解了吧~
以 t 为单位转移肯定MLE+TLE。
所以以卖出为单位转移。
设 f(i) 为在得到第 i 张牌之后卖出卡牌的总积分。
显然有
f(i)=j≤imax[f(j−1)+(ci−cj+1)2]其中 ci 为 i 之前 ai 的出现次数,可以用桶预处理。
注意可以一拿到牌就卖出,所以 j≤i 有等号。
有 (ci−cj)2 项,考虑斜率优化。
我当时把斜率优化忘光光了,喜提 TLE 60pts
正文开始:对本人早已忘却的斜率优化的记忆恢复
中心思想:分离变量。将与i有关的量看作常量,与j有关的看作变量,此时搞个数据结构与变量有关的最大值即可。
在直线方程 y=kx+b 中,x,y 是变量。因此考虑将其化成 y(j)=K(i)x(j)+B(i) 的形式。
稍加计算可得
K(i)y(j)x(j)=2(ci+1)=f(j−1)+cj2=cj则有 f(i)=maxB(i)−(ci+1)2
原问题转化为:
有一系列 x(j),y(j),给定一个 K(i),求在所有过 (x(j),y(j)),斜率为 K(i) 的直线中截距最大的一个。
显然答案点一定在一个上凸壳中(见左侧)。否则一定有一点会比它更优(见右侧)。

用一个类似单调队列的东西确保斜率单调递减即可。
具体地:
中午了,吃饭,走人。
lower_bound,启动!
2024.9.4 更新
更新啥更新,摸鱼去了