![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
可并堆|堆
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 · 1312 阅读 · 1 评论 -
购买书籍[贪心][堆]
题目描述:L 的书籍被 M 偷了以后伤心欲绝,决定再购买一些回来,现在有 N 本书可以买,每本书的价格是 a[ i ]元。现在 L 总共有 M 元,以及 K 张优惠券。 对于每本书,如果使用一张优惠券,则可以用b[i]的优惠价格购买。 注意每本书只能使用一张优惠券,只能购买一次。L想知道自己最多可以购买几本书?输入格式:第一行三个整数 N , K , M接下来 N 行,每行...原创 2018-10-04 11:53:24 · 232 阅读 · 0 评论 -
罗马游戏[可并堆]
传送门写一个大根堆就可以了 , 注意并查集找fa不能路径压缩 , 因为每个点所在的集合的根是变化的#include<bits/stdc++.h>#define N 1000050using 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 · 193 阅读 · 0 评论 -
种树[堆][贪心][链表]
传送门#include<bits/stdc++.h>#define N 200050using 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 · 134 阅读 · 0 评论 -
Black Box[优先队列]
传送门将前i-1小放在第一个小根堆(大的在上)后面的放在第二个大根堆(小的在上) , 每次插入到大根堆里 , 不满足顺序就将大小两个的top交换每次完了过后 , 放一个到小根堆就好了#include<cstdio>#include<queue>#define N 30050using namespace std;int n,a[N],m,now;...原创 2018-11-24 14:00:27 · 299 阅读 · 0 评论 -
[APIO2012]派遣 [可并堆]
传送门首先想到枚举每个点作为领导 , 然后我们需要快速查出x为根的子树可以有多少个节点满足这些节点加起来不超过m于是我们从下到上合并 , 维护一个小根堆(大的在上) , 如果堆的和>m就弹出堆顶#include<bits/stdc++.h>#define N 100050#define LL long longusing namespace std;in...原创 2018-12-01 14:50:16 · 267 阅读 · 0 评论 -
易水决[堆][贪心]
分析 (https://blog.csdn.net/dreaming__ldx/article/details/83447671)#include<bits/stdc++.h>#define N 1000005#define LL long longusing namespace std;LL l,n,m,a[N],b[N],p[N],q[N],a...原创 2018-10-28 11:17:02 · 166 阅读 · 0 评论 -
NOIP模拟19/07/22
字符处理[题目描述]妈妈的工作是英语翻译,经常和英语字符串打交道,今天妈妈给了 Tom 一个只有小写字 母构成的字符串,需要 Tom 做以下工作:要是连续出现相同的小写字母,则把他们替换成这个字母的大写形式,后面紧跟相同字 母的个数,并把它之前跟之后的两段字串调换,例如出现 bcaaaaaaef,则新字符串变成: efA6bc,然后重新扫描字串,直到没有出现连续相同的小写字母为止。...原创 2019-07-22 15:33:50 · 347 阅读 · 0 评论