专栏文章

题解:CF1246F Cursor Distance

CF1246F题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min4qdwl
此快照首次捕获于
2025/12/01 20:32
3 个月前
此快照最后确认于
2025/12/01 20:32
3 个月前
查看原文
直接做是困难的。
Lx,RxL_x,R_x 为上一个与下一个与 sxs_x 相同的位置。不存在则分别记为 11nn
钦定一个终点 xx,考虑其他点跳到 xx 的步数。
对于可以一步到达 xx 的点。显然,其位于 [Lx,Rx][L_x,R_x] 中。
对于可以两步到达 xx 的点。其可以一步走进 [Lx,Rx][L_x,R_x] 中,然后再一步到 xx
所以可以两步到达 xx 的点构成区间 [mini=LxRxLi,maxi=LxRxRi][\min \limits _{i=L_x}^{R_x}L_i,\max \limits _{i=L_x}^{R_x}R_i]
更进一步的,如果 kk 步可达 xx 区间是 [L,R][L,R]。则 (k+1)(k+1) 步可达 xx 的区间为 [mini=LRLi,maxi=LRRi][\min \limits _{i=L}^{R}L_i,\max \limits _{i=L}^{R}R_i]
一开始让 L=R=xL=R=x,然后每次 Lmini=LRLi,Rmaxi=LRRiL\gets \min \limits _{i=L}^{R}L_i,R \gets\max \limits _{i=L}^{R}R_i
需要 kk 步到达 xx 的点会在 kk 次扩展是被 [L,R][L,R] 包含。每次扩展完加上不被 [L,R][L,R] 包含的点数即可使其刚好加 kk 次。即每跳一次贡献 (nR+L1)(n-R+L-1)
当字符串为 aaaaaaaaaa 状物时,每次扩展只能扩 11 格,所以是 O(n2)\mathcal{O}(n^2) 的。
考虑优化。对于每种在 [L,R][L,R] 的同种字符,显然只有最靠左的对新的 LL 有贡献,最靠右的对新的 RR 有贡献。
对于相同的 LL,只要区间 [L,R][L,R] 包含了某种字符,则这个字符最靠左位置固定。不难发现,如果 [L,R][L,R] 中的字符集大小不变,则 RRLL 的扩展没有影响。右边同理。
只有 L,RL,R 一边的情况就显然可以倍增了,跳到字符集变大的位置即可。然后在新的字符集大小重新倍增即可。
S=26\lvert S \rvert=26 为字符集大小,复杂度为 O(nSlogn)\mathcal{O}(n\lvert S \rvert \log n)

评论

0 条评论,欢迎与作者交流。

正在加载评论...