随笔- 106  文章- 0  评论- 0  阅读- 27863 

https://www.luogu.com.cn/problem/P3871

 看题解有好几种做法

1、对顶堆:用两个堆,分别是大顶堆和小顶堆,维护一个动态的有序序列

我们首先将所有的数丢进大根堆里然后取一半丢进小根堆里,这样就把所有的数分成了两段有序的部分。

加入操作可以每次取小根堆堆顶和加入的数比较,大于堆顶则加入小根堆否则加入大根堆(为了维护这个排序的有序性)。

而在询问时为了保证大根堆堆顶就是答案,我们要使大根堆里的元素等于(n+1)/2,所以加两个while循环控制它的元素个数(少了就从小根堆那里抢,多了就丢给小根堆),然后输出答案

  

2、fhq treap

这个无旋treap本来就是维护动态序列的,所以可以拿来做(不要只会做模版)

  

 

 posted on   shirlybabyyy  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示