【题解】Solution Set - NOIP2024集训Day3 权值线段树、动态开点、主席树

【题解】Solution Set - NOIP2024集训Day3 权值线段树、动态开点、主席树

「JSOI2018」列队

一个结论:所有的人都按顺序依次去她该去的位置,一定是不劣的。bf

现在式子变成了:(ai 排序

Ans=i=1rl+1|ai(k+i1)|

先建一颗主席树,维护 ai

显然 ai,k+i 都单增,而且 ai 的变化量一定是不小于 k+i 的,所以可以二分中间的断点来消除绝对值。

时间复杂度:O(nlognlogV)


然后发现 T 了。

改成线段树上二分就好了。

注意一下,与直接二分位置不同,线段树上二分要二分值域,然后再推出位置。


「BZOJ十连测」可持久化串串

首先,最短循环节 = n - 最长的 border。

如果每次暴力跑这条链的话,时间复杂度应该是所有链的长度之和,

Solution1 - border 性质

考虑让每次跳 nxt 不超过 log链长 次。设当前点为 i

对于每一次 s[nxtj+1]s[i] 分讨一下:

  1. nxtjj2:直接跳,j 的规模减小一半。
  2. nxtj>j2:一定存在一个 jnxtj 的循环节,而对于每一个循环节的后一个元素一定 s[i],所以我们可以一次性跳到第一个循环节的末尾,即 jmod(jnxtj),因为 jnxtjj2,所以 j 的规模也减小一半。

每次倍增判断 s[nxtj+1]=s[i],总时间复杂度为 O(nlog2n)


Solution2 - 可持久化

考虑维护从任意点作为最后元素,在加入任意一个新元素 i 时,jnxtfa 最后跳到的 nxt​(其实就是直接维护所有可能出现的询问。

先从 nxti 继承,然后更新一下 ch 的位置就好了。

时间复杂度:O(nlogn)


今天的题都是自己做出来的,可喜可贺😉

posted @   CloudWings  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示