堆
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
-
廊桥分配
题目链接:廊桥分配显然我们只需要对每一个飞机计算出降落在廊桥需要的廊桥个数。然后对于前后缀max进行枚举计算即可。具体的计算,其实我们就是去假设每个飞机来的时候会停在编号最小的廊桥,那么我们也就是停在廊桥的时候,通过编号计算出个数了。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;原创 2021-10-27 15:16:51 · 849 阅读 · 0 评论 -
新年的饮食方案
题目链接:新年的饮食方案显然可以贪心,按照左端点排序后,对于每一天,我们每次去取结束时间最早的即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=1e6+10;int n,m,res,up,now;pair<int,int> a[N];pri原创 2021-03-20 00:05:12 · 111 阅读 · 0 评论 -
Kisik
题目链接:Kisik显然我们最后矩形的高度一定是物品的某一个高度。然后我们可以枚举高度然后选k个最小的宽度,排序后用堆维护k个最小值即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e6+10;int n,k,res=1e18,sum; priority_原创 2021-03-06 13:17:22 · 190 阅读 · 0 评论 -
Codeforces - Weights Division
题目链接:Codeforces - Weights Division其实这道题是没啥思维难度的。我们考虑每条边的贡献,也就是下面的叶子数和当前边的权值。因为减少的权值只有两种,我们可以用堆来维护每次能减去的最多价值,然后判断两个费用1的和费用2的大小,然后选择最优的即可。不过细节较多。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long lo原创 2020-08-07 13:40:34 · 1614 阅读 · 3 评论 -
[JXOI2017]加法
题目链接:[JXOI2017]加法显然可以二分,然后我们就可以得到每个点需要被多少个区间覆盖。然后左端点从小到大排序,然后贪心选择即可。但是有区间覆盖的次数计算,我们可以直接差分,从前往后计算前缀和,用fenwick也可以。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const原创 2020-06-28 10:59:21 · 234 阅读 · 0 评论 -
[POI2005]SAM-Toy Cars
题目链接:[POI2005]SAM-Toy Cars显然每次,如果不在地面上,肯定直接把下一个距离最远的放上去。所以堆维护下一个最远的距离即可。但是要注意,如果当前在地面上,我们不用操作,但是我们要更新下一个的距离。由于是堆,不好更新,所以我们可以直接K++,再放一个当前的进去,或者把堆换成set、AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define in原创 2020-06-04 17:07:10 · 240 阅读 · 0 评论 -
跳伞求生
题目链接:跳伞求生显然可以费用流,不过复杂度太高。我们可以利用堆来快速模拟费用流的退流操作。显然,我们从小到大枚举a,把合适的房屋全部放进去,且放入的值为:c[j]-b[j],如果当前这个a加上堆中的最大值为正,我们就可以直接对其匹配,但是如果后面的一个与当前房屋匹配更优呢?也就是费用流的退流,我们直接把 -a[i] 也放进堆中即可,如果与某个值匹配,那么就代表退流了。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#inclu原创 2020-05-19 21:36:55 · 271 阅读 · 0 评论 -
区间交
题目链接:区间交和codeforces上面一道基本上的一样的,因为数字都为正,所以枚举某个直线一定是尽量覆盖区间越大。然后区间按照左端点排序之后,维护区间第k大即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long long...原创 2020-04-17 13:42:47 · 204 阅读 · 0 评论 -
Facer帮父亲
题目链接:Facer帮父亲其实就是给个二次函数,分配x的值不超过k。因为k,很小,我们直接用堆维护即可。堆中的比较值就是增量。注意可以不分配完。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namesp...原创 2020-04-09 11:26:25 · 146 阅读 · 0 评论 -
51NOD -1191消灭兔子
题目链接:51NOD -1191消灭兔子显然,我们从小到大枚举兔子。然后贪心从可以选的当中选最小值即可。用堆维护。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const i...原创 2020-04-01 21:45:10 · 233 阅读 · 0 评论 -
51NOD - 1689逛街
题目链接:51NOD - 1689逛街首先枚举最后一个选的位置。(答案一定在其中)因为我们要至少选k个1,所以肯定在前面选k个最小的,其他的再单独选。所以我们可以用堆来维护选的k个。然后其余的直接放到权值树当中,在权值树中二分即可。注意特判k==0的情况。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#includ...原创 2020-04-01 13:48:29 · 233 阅读 · 0 评论 -
Codeforces - Fedor and coupons
题目链接:Codeforces - Fedor and coupons先对左端点升序排序。然后枚举要选的左端点最靠右的边,此时怎么选前面的点呢?肯定是选k个最大的右端点呀。所以可以用个权值线段树求前k个,不过我们是从左往右扫描的,用堆维护k个数字即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include&l...原创 2020-03-25 17:25:04 · 201 阅读 · 0 评论 -
[NOI2010]超级钢琴
题目链接:[NOI2010]超级钢琴和有一道区间前k大异或很像。先求前缀和,然后就变成右端点固定,取左端点的第k小问题,主席树维护即可。并用堆维护前k个。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing...原创 2020-03-24 11:52:20 · 184 阅读 · 0 评论 -
Codeforces - Planning
题目链接:Codeforces - Planning首先我们可以是在可选择的范围内,尽量非代价大的。其次对于每一个点我们都能找到一个合法区间,然后就可以线段树维护区间max了。不过,因为我们可以从前面往后面扫,然后用堆维护即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc+...原创 2020-03-22 16:33:18 · 167 阅读 · 0 评论 -
Codeforces - Playlist
题目链接:Codeforces - Playlist最开始以为具有三分性,然后就三分了,就wa了,因为存在k,所以三分性是错的。然后我们想,如果我们知道当前选的最小的魅力值,那么肯定选k个长度最大的,并且魅力值大于最小的。然后所以我们需要一直维护k个最大值,用个小根堆即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")...原创 2020-03-14 15:41:46 · 297 阅读 · 0 评论 -
BZOJ - 2151
题目链接:BZOJ - 2151每次选最大,显然不是全局最优,所以我们可以用到,反悔自动机的策略。使得我们贪心的时候,可以反悔。考虑每次选局部最优的最大值时,我们其实有可能选相邻的两个价值更大,所以我们再加一个新的节点到堆当中,如果被选,那么代表反悔。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include&l...原创 2020-02-16 11:30:13 · 211 阅读 · 0 评论 -
Codeforces - Buy Low Sell High
题目链接:Codeforces - Buy Low Sell High贪心+反悔自动机。什么是反悔自动机呢?因为贪心只能得到局部最优解,而不能全局最优解。所以,对于有些贪心,存在一个反悔操作。使得局部最优=全局最优。本题也是一样的,我们每次当前的值,可以从小根堆当中取最小的值更新,但是不一定是最优的,因为后面再更新可能值更大。我们就把当前的值重新放回到堆中。第一次取出来代表买入,第二次取...原创 2020-02-16 10:49:02 · 504 阅读 · 0 评论 -
2019河北省大学生程序设计竞赛 - 舔狗
题目链接:2019河北省大学生程序设计竞赛 - 舔狗看到这道题我想到了拓扑排序,每次找度少的贪心肯定最优。进而想到直接用堆维护当前点的最小度即可。不知道为什么比赛过的人这么少。。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int lon...原创 2020-02-14 20:59:57 · 440 阅读 · 0 评论 -
可并堆 - 左偏树
题目描述如题,一开始有N个小根堆,每个堆包含且仅包含一个数。接下来需要支持两种操作:操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删除或第x和第y个数在用一个堆内,则无视此操作)操作2: 2 x 输出第x个数所在的堆最小数,并将其删除(若第x个数已经被删除,则输出-1并无视删除操作)输入格式第一行包含两个正整数N、M,分别表示一开始小根堆的个数和接下来...原创 2019-11-14 17:46:20 · 133 阅读 · 0 评论 -
HDU - 6705 path
pathTime Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2608 Accepted Submission(s): 625Problem DescriptionYou have a directed weighted graph...原创 2019-10-30 20:57:31 · 286 阅读 · 0 评论 -
小Z的AK计划
题目描述在小Z的家乡,有机房一条街,街上有很多机房。每个机房里都有一万个人在切题。小Z刚刷完CodeChef,准备出来逛逛。机房一条街有 n 个机房,第 i 个机房的坐标为 xi ,小Z的家坐标为 0。小Z在街上移动的速度为1,即从 x1 到 x2 所耗费的时间为 |x1 − x2|。 每个机房的学生数量不同,ACM 题目水平也良莠不齐。小Z到达第 i 个机房后,可以花 ti 的时间想题,然后...原创 2019-08-24 11:52:51 · 239 阅读 · 1 评论 -
最小函数值
题目描述有n个函数,分别为F1,F2,…,Fn。定义Fi(x)=Aix^2+Bix+Ci (x∈N*)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个)。输入格式输入数据:第一行输入两个正整数n和m。以下n行每行三个正整数,其中第i行的三个数分别位Ai、Bi和Ci。Ai<=10,Bi<=100,Ci<=10 000。输出格式输出数...原创 2019-08-08 17:11:38 · 590 阅读 · 0 评论