Kth

https://www.luogu.com.cn/problem/solution/P2617

1、静态整体Kth

滑稽吧...sort一遍就好了。

时间复杂度O(nlogn)O(nlogn) 空间复杂度O(n)O(n)

2、动态整体Kth

离散化后开一棵权值线段树,每个位置的值表示这个位置对应的那个数(离散化后的)有多少个,向上维护和;

查询时先查询左子树和sum,比较k和sum的大小:若k<=sum则说明第k小数在左子树中,递归查询左子树;

否则,这个数对应的就是右子树中第k-sum小的数,k-=sum,递归查询右子树。

时间复杂度O(nlogn)O(nlogn) 空间复杂度O(n)O(n)

3、静态区间Kth

对每个点以其前缀开一棵权值线段树,那么任意一段区间均可以表示成为两棵权值线段树作差,即R位置的线段树减去L-1位置上的线段树

每个点开一棵线段树空间复杂度O(n^2)O(n 2 ),MLE,考虑到后一个位置相比于前一个位置的更改只有lognlogn个节点,所以使用主席树

时间复杂度O(nlogn)O(nlogn) 空间复杂度O(nlogn)O(nlogn)

4、动态区间Kth(就是本题辣) luogu P2617 Dynamic Rankings

还是要想办法维护前缀和。如果只是同3、的前缀和的话,就要对前缀和进行O(nlogn)O(nlogn)的单次修改,显然TLE。

这里考虑用树状数组维护前缀和。修改时,可以只修改lognlogn个位置,复杂度O(log^2n)O(log 2 n);

查询时,依旧是R位置减去L-1位置,这时候不再是两棵线段树作差,而是log棵线段树与log棵线段树作差;跳的时候,log个节点一起跳到左子树/右子树

时间复杂度O(nlog^2n)O(nlog 2 n) 空间复杂度O(nlogn)O(nlogn)

全部评论

相关推荐

11-17 11:15
门头沟学院 Java
金山办公终于发offer了,但薪资和平台都不如已有的offer打算拒了,A不了薪资,不满意直接拒了,留给需要的人嘿嘿嘿时间线:10.14线下一面&nbsp;,10.23线上二面,下午发测评,11月1日HR面,11月14日电话谈薪,11月17日直接发offer
star__plat...:好兄弟干的好啊,解气。金山第一次笔难度高的离谱,第二次简单的离谱全A了,用人部门筛选中估计最后还是要挂我,就这今早智联招聘还给我发信息让我投
offer帮选
点赞 评论 收藏
分享
11-06 16:50
门头沟学院 Java
用微笑面对困难:word打字比赛二等奖的我,也要来凑合凑合
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务