![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构:二叉堆
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
2016 UESTC Training for Data Structures B - 卿学姐与基本法 自己构建了一个和堆有点像的数据结构
对很多个区间进行处理,这里建一个结构体放存放区间,然后把区间放到vector里,根据左边界排序,然后逐次进行处理使所以区间变成不相交的区间一直维护这样的区间至于说像堆, 是因为:这个也是延迟操作,在查询单时候才进行维护的维护时,删除vector的那些元素时令那个元素的 了left 成员为INF,然后sort再pop_back()查询的时候就vector中的元素一个个查询过去了☺原创 2016-05-01 00:01:37 · 1535 阅读 · 0 评论 -
2016 UESTC Training for Data Structures D - 卿学姐与魔法 优先队列、构造
用STL里的优先队列直接维护前n+1小的数字ptr = 0先 i = ptr 然后A + B1 + B2 + …… B(n-1)然后 j = 1 B1 + A2 + ……A(n-1)这样依次下去,当 Aptr + B(ptr+1) 已经比.top()大了,则可以break了。故最好的情况O(n), 最差的情况(┬_┬)不会算但绝对小于O(n^2) 竟然用了do while 开心原创 2016-05-01 00:02:14 · 1341 阅读 · 0 评论 -
Codeforces Round #375 (Div. 2) D. Lakes in Berland __ dfs+贪心+小根堆
dfs+贪心+小根堆枚举所有未被标记过的 '.' 点, 先跑一遍dfs,如果是湖(没有到四周边界),则再跑一边来找出这个湖的大小,并记录在小根堆里 pq.push(ii(cnt, make_pair(i, j)));然后对于pq里最小的前 pq.size() - k 个湖,跑一遍dfs把湖填上。//初始坐标为 (pq.top().second.first, pq.top().second.second)然后MLE了,其实应该TLE吧,嘿嘿dfs的时候没有处理本次dfs时访问过的点,所以可能跳不出递归原创 2016-10-16 11:45:17 · 836 阅读 · 0 评论 -
Canada Cup 2016 D. Contest Balloons 小根堆+贪心
题意是每个人有ti个气球,和一个权值wi,然后会根据权值进行降序排序,Limak也有自己的初始气球和一个权值,然后Limak可以把自己的气球给别人,然后别人会因为 ti' > wi 而浮起来,从而失去排名资格,求Limak可以得到的最好的名次(所有气球比a大,且没有被浮起来的人,排在a的前面)小根堆+贪心a, b分别表示 Limak 的气球数和权值然后把出Limak外的所以同志,按照气球数进行排序,得到一个 p v[maxn]。然后把所有比a大的元素 把 v[i].w - v[i].t即差值丢到小根原创 2016-11-09 22:40:41 · 847 阅读 · 0 评论 -
POJ - 3882 Stammering Aliens 后缀数组、二分、二叉堆、ST表
题意:给出一个字符串,要求找出至少出现m次的最长子串长度。后缀数组、二分、二叉堆、ST表所求的就是相邻的m个后缀的LCP,即这m-1个height[i]的最小值,所以可以二分答案,或者用ST表(O(nlogn)预处理,O(1)查询)来维护,或者用二叉堆也可以,这三种方法的运行速度依次降低。原创 2017-02-17 21:27:08 · 711 阅读 · 0 评论 -
UESTC 1603 BanG Dreamer 小根堆、贪心+set<pair<int, int>>+low_bound
题意:给出一个序列,要求划分成尽可能少的堆序列。一个序列S={s1,s2,...,sn}S={s1,s2,...,sn}是一个“堆型序列”当且仅当,存在一个有nn个结点的二叉树,其每个结点与该序列的元素一一对应,而且对于该二叉树的每个非根结点sisi和它的父节点sjsj,满足sj≤sisj≤si并且j<ij<i。子序列的定义是,其是某个序列删除掉任意数量元素之后,所剩下的部分。并且不改变其原有的顺序。小根堆、贪心+set<pair<int, int>>+low_bound用set维护,set中存储原创 2017-05-16 19:14:21 · 801 阅读 · 0 评论 -
XVII Open Cup named after E.V. Pankratiev Problem I. Rage Minimum Query 手写小根堆、卡时间+卡内存、或者随机化
题意:都是使用unsigned int 32,q个修改,每次修改一个值,并求出一个当前总区间最小值si,求 sigma{si * 10099^i mod 2^32}(1 <= i <= q),然后每次的修改操作,i和x val[i % n] = x,的i和x都是用给出的随机函数求出。 手写小根堆、卡时间+卡内存、或者随机化线段树显然很可能超时,所以想用优先队列来做,数组初始值为2^31-1,且生成的x必定小于这个值,所以可以用优先队列来记录这些值,每个元素维护<x, i> 表示当前把val[i]改成了x原创 2017-08-03 00:16:33 · 1219 阅读 · 0 评论 -
UESTC 1063 秋实大哥与妹纸 二叉堆(小根堆)
卡内存的题目,第一次遇到 (┬_┬)维护好n/2+1个元素就好,后面的push,然后pop本来用C++STL的priority_queue写了一个,结果爆内存了,MLE所以用二叉堆来写原创 2016-03-07 13:37:45 · 1614 阅读 · 1 评论