可并堆|堆
FSYo
我不去想是否能够成功,
既然选择了远方,
便只顾风雨兼程
展开
-
可并堆
可以将两个堆合并的堆 1.斜堆 最主要的操作---- int merge(int x,int y) { if(!x) return y;//x为空,返回y if(!y) return x;//同理 //为了方便,将y接在x的子树上 if(a[x].val<a[y].val)//小根堆 swap(x,y); a[x].r=merg...原创 2018-07-31 14:54:52 · 1338 阅读 · 1 评论 -
购买书籍[贪心][堆]
题目描述: L 的书籍被 M 偷了以后伤心欲绝,决定再购买一些回来,现在有 N 本书可以买,每本书的价格是 a[ i ]元。 现在 L 总共有 M 元,以及 K 张优惠券。 对于每本书,如果使用一张优惠券,则可以用b[i]的优惠价格购买。 注意每本书只能使用一张优惠券,只能购买一次。 L想知道自己最多可以购买几本书? 输入格式: 第一行三个整数 N , K , M 接下来 N 行,每行...原创 2018-10-04 11:53:24 · 239 阅读 · 0 评论 -
罗马游戏[可并堆]
传送门 写一个大根堆就可以了 , 注意并查集找fa不能路径压缩 , 因为每个点所在的集合的根是变化的 #include<bits/stdc++.h> #define N 1000050 using namespace std; struct Node{int l,r;}t[N]; int n,m,a[N],fa[N],killed[N]; char s[10]; int read...原创 2018-11-22 21:21:23 · 218 阅读 · 0 评论 -
种树[堆][贪心][链表]
传送门 #include<bits/stdc++.h> #define N 200050 using namespace std; int n,m,a[N],l[N],r[N],flag[N],ans; struct Node{ int x,val; bool operator < (const Node &a) const{ return a.val &...原创 2018-11-24 13:35:32 · 140 阅读 · 0 评论 -
Black Box[优先队列]
传送门 将前i-1小放在第一个小根堆(大的在上) 后面的放在第二个大根堆(小的在上) , 每次插入到大根堆里 , 不满足顺序就将大小两个的top交换 每次完了过后 , 放一个到小根堆就好了 #include<cstdio> #include<queue> #define N 30050 using namespace std; int n,a[N],m,now; ...原创 2018-11-24 14:00:27 · 310 阅读 · 0 评论 -
[APIO2012]派遣 [可并堆]
传送门 首先想到枚举每个点作为领导 , 然后我们需要快速查出x为根的子树可以有多少个节点 满足这些节点加起来不超过m 于是我们从下到上合并 , 维护一个小根堆(大的在上) , 如果堆的和>m就弹出堆顶 #include<bits/stdc++.h> #define N 100050 #define LL long long using namespace std; in...原创 2018-12-01 14:50:16 · 272 阅读 · 0 评论 -
易水决[堆][贪心]
分析 (https://blog.csdn.net/dreaming__ldx/article/details/83447671) #include<bits/stdc++.h> #define N 1000005 #define LL long long using namespace std; LL l,n,m,a[N],b[N],p[N],q[N],a...原创 2018-10-28 11:17:02 · 175 阅读 · 0 评论 -
NOIP模拟19/07/22
字符处理 [题目描述] 妈妈的工作是英语翻译,经常和英语字符串打交道,今天妈妈给了 Tom 一个只有小写字 母构成的字符串,需要 Tom 做以下工作: 要是连续出现相同的小写字母,则把他们替换成这个字母的大写形式,后面紧跟相同字 母的个数,并把它之前跟之后的两段字串调 换,例如出现 bcaaaaaaef,则新字符串变成: efA6bc,然后重新扫描字串,直到没有出现连续相同的小写字母为止。...原创 2019-07-22 15:33:50 · 361 阅读 · 0 评论