四种类型的第k小数
四种类型的第k小数
1、静态整体Kth
很简单...sort一遍就好了。
时间复杂度O(nlogn) 空间复杂度O(n)
2、动态整体Kth
2.1离散化后开一棵权值线段树,每个位置的值表示这个位置对应的那个数(离散化后的)有多少个,向上维护和;
查询时先查询左子树和sum,比较k和sum的大小:若k<=sum则说明第k小数在左子树中,递归查询左子树;
否则,这个数对应的就是右子树中第k-sum小的数,k-=sum,递归查询右子树。
时间复杂度O(nlogn) 空间复杂度O(n)。
2.2值域大或者要求在线的动态开点权值线段树。时间复杂度为O(nlog值域大小)空间复杂度为O(nlog值域大小)。
3、静态区间Kth
对每个点以其前缀开一棵权值线段树,那么任意一段区间均可以表示成为两棵权值线段树作差,即R位置的线段树减去L-1位置上的线段树
每个点开一棵线段树空间复杂度O(n2),MLE,考虑到后一个位置相比于前一个位置的更改只有logn个节点,所以使用主席树
时间复杂度O(nlogn) 空间复杂度O(nlogn)
4、动态区间Kth
还是要想办法维护前缀和。如果只是同3、的前缀和的话,就要对前缀和进行O(nlogn)的单次修改,显然TLE。
这里考虑用树状数组维护前缀和。修改时,可以只修改logn个位置,复杂度;
查询时,依旧是R位置减去L-1位置,这时候不再是两棵线段树作差,而是log棵线段树与log棵线段树作差;跳的时候,log个节点一起跳到左子树/右子树
时间复杂度 空间复杂度O(nlogn)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库