K大数查询

标记永久化:1:26:00

如果外层线段树为下标线段树会发现没有办法快速维护,这个时候我们就要想到权值线段树:外层采用权值线段树,其每个节点维护一颗下标线段树,表示这个节点所代表的权值在序列中有多少个。如果n=5,值域大小为5,那么权值线段树如下

image

比如[4,5]这个节点,维护了一颗线段树,如下

image

对于这棵线段树中的[1,3]这个节点,表示的是45在序列下标为[1,3]中出现的总次数

于是修改就可以变成O(log2n)

对于查询,很容易想到用二分,但是时间复杂度为O(log3n);线段树加二分我们一定要想到线段树二分,这样时间复杂度就会变成O(log2n)

对于内层线段树,肯定要使用动态开点;对于区间修改可以使用懒标记和标记永久化,这里如果使用懒标记的话,下传的时候如果儿子没有开点是要先开一个点的,这样可能会导致多开很多个点,于是MLE,所以用标记永久化更能过

posted @   最爱丁珰  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示