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)

全部评论

相关推荐

totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
巧克力1:双选会不如教室宣讲会
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务