数据结构-堆
AcerMo
一只辣鸡大学生
展开
-
堆 【模板】
堆分为小跟堆和大根堆,根据实际情况,选择,这里我用优先队列priority queue实现了小根堆,如果想实现大根堆,也可以使用优先队列来写 以洛谷P3378为例 -> 原题 代码 //By AcerMo #include<cmath> #include<cstdio> #include<cstring> #include<iostr...原创 2018-02-26 15:15:44 · 215 阅读 · 0 评论 -
洛谷 P1138 第K小整数
题目描述现有n个正整数,n≤10000,要求出这n个正整数中的第k个最小整数(相同大小的整数只计算一次),k≤1000,正整数均小于30000。输入输出格式输入格式:第一行为n和k; 第二行开始为n个正整数的值,整数间用空格隔开。输出格式:第k个最小整数的值;若无解,则输出“NO RESULT”。输入样例#1:5 1 2 1 5 2 3 2输出样例#1:2 5原题戳用一个堆,每次读入时将其加入堆中...原创 2018-02-26 15:20:21 · 1014 阅读 · 0 评论 -
BZOJ1112&&洛谷P3466 [POI2008]KLO-Building blocks(砖头)[对顶堆学习笔记]
坑爹的BZOJ因为不让 输出方案我WA了若干次 据说正解是平衡树/线段树,我不会,就用了个新东西—>对顶堆 对顶堆 一个维护中位数的东西,我们通过维护两个堆,来维所有数的中位数 (显然我们可以排个序) 具体实现: 我们维护一个大根堆,把所有小于等于中位数的数放进去,堆顶就是中位数,你会问,为什么会是中位数?我们保证这个堆中的元素个数始终为(n+1)/2个,两个堆元素个数一共为n所以这个堆的堆...原创 2018-09-18 08:16:59 · 365 阅读 · 0 评论 -
BZOJ2151&&洛谷P1792 [国家集训队]种树
一道贪心好题,不知道大家做没做过BZOJ1150数据备份,和这道题基本上一样 一个点能影响以及受影响的位置只有他的前面面一个位置和后面一个位置,然后我们就建了一个双向链表,一旦选了x点,就把x点的前驱和后继标记一下,说明这两个点不能再选,然后我们建一个大根堆,每次取优美值最大的位置,这样贪心不一定是最优的,因为可能存在x,y,z我们贪心的选取了优美值最大的y,导致x,z不能选,但是可能x和z一起...原创 2018-09-13 13:55:42 · 306 阅读 · 0 评论 -
BZOJ1150&&洛谷P3620 [APIO/CTSC 2007]数据备份
这应该是道贪心题 我们不难发现,一个点连电缆肯定是要和他左侧第一个或者右侧第一个连,这样是最优的,但是可能存在a,b,c,d四个点,bc是目前可连得最短边,但是连接ab和cd更优,怎么办呢?我们可以在第一次用掉bc这条边后,将ab+cd-bc作为bc边的新值加入图中,那么之后若ab+cd-bc更优的话,bc这条边就被抵消了 然后我们用一个优先队列,按相邻两两之间的距离差排序 代码 //B...原创 2018-09-02 14:16:27 · 286 阅读 · 0 评论 -
Codeforces140CNew Year Snowmen
一道优先队列好题 不难发现,每次取最多的几个雪球能保证凑出来的雪人最多,然后我们就先离散化一下,然后封装丢到优先队列里,每次取出队首的三个,将数量各自减一 ,表示凑了一个雪人,然后将数量大于一的再丢回去,直到剩余种数小于3为止 代码 //By AcerMo #include<queue> #include<cmath> #include<cstdio> #inc...原创 2018-09-25 21:06:50 · 333 阅读 · 0 评论 -
BZOJ1293&&洛谷P2564[SCOI2009]生日礼物
单调队列 貌似是这个 我们按照位置排序后,将每个位置依次加到队列里,然后判断是不是最早出现的点到这个点之间有所有种类的珠子,有的话向右移动左端点,不断更新答案,直到珠子种类少于总数为止 代码 //By AcerMo #include<cmath> #include<cstdio> #include<cstring> #include<iostream>...原创 2018-10-15 21:25:31 · 204 阅读 · 0 评论