关于本题一种O(n)的做法
查看原帖
关于本题一种O(n)的做法
475112
MarSer020楼主2023/10/6 11:34

rt

转移式:设 fif_i 表示删除若干个元素使得当前序列的 mex\text{mex} 值为 ii 的最小代价,转移式为 fi=min⁡{fj+j×(cnti−1)+i}f_i=\min\{f_j+j\times (cnt_i-1)+i\},cnticnt_i 表示满足 aj=ia_j=i 的 jj 的个数。

考虑对这个式子进行优化:

当 cnti≤cntj,i<jcnt_i\le cnt_j,i<j 时,删掉 ii 显然比删掉 jj 更优,此时 fjf_j 这一状态显然不需要维护,而这一类位置可以用栈维护。将 00 到 kk 依次试着加入栈,若此时的 ii 满足 cnti<cnttopcnt_i<cnt_{top} 则入栈,容易发现栈内元素个数是 O(n)O(\sqrt{n}) 级别的,在栈上跑上述 dp\text{dp} 即可。

问一下这个做法保真吗 如果假了能否给一组hack/kk

反正过了CF的数据

还有就是这种做法能不能交题解啊/kk

2023/10/6 11:34
加载中...