数据结构---堆
forezxl
水君一枚
展开
-
BZOJ2006: [NOI2010]超级钢琴(洛谷P2048)
贪心 ST表 堆 BZOJ题目传送门 洛谷题目传送门 貌似这是一类题目啊。。。 题意:给定一个序列,求长度在[l,r][l,r]范围内的前k大子段和,不能重复。 最暴力的方法当然是把所有子段搞出来排个序,但是当r−l+1r-l+1 足够大时,显然会爆炸。 考虑到k不大,我们可以换个思路:不断选最大的子段,选k次。根据k和n的范围,可以推断大概每次选择需要O(log2n)O(log_原创 2018-01-19 20:43:26 · 328 阅读 · 0 评论 -
BZOJ4458: GTY的OJ
贪心 ST表 堆 题目传送门 树上的超级钢琴,我们只需要建树上的ST表即可,稍微复杂了点。 代码: #include #include #include #include #include #include #define N 500005 #define lg 19 #define il inline using namespace std; typedef long long LL原创 2018-01-20 16:08:48 · 364 阅读 · 0 评论 -
BZOJ1029 [JSOI2007]建筑抢修(洛谷P4053)
贪心 堆 BZOJ题目传送门 洛谷题目传送门 首先按照T2从小到大排序,然后扫一遍过去进行贪心。 如果当前时间能抢修的就抢修,并把T1加到堆里。否则和堆顶比较,如果堆顶>T1就把堆顶拿出来,把T1加进去。这么做是为了减少时间。 代码: #include<queue> #include<cctype> #include<cstdio> #incl...原创 2018-02-09 16:27:15 · 246 阅读 · 0 评论 -
BZOJ5132: [CodePlus2017年12月]火锅盛宴(洛谷P4032)
堆 线段树 BZOJ题目传送门 洛谷题目传送门 这道题有蛮多种做法的,但大体是堆+线段树/树状数组 我们把生的和熟的分开维护。生的用一个堆维护时间,每次读入时间后把熟了的转移到线段树上去,线段树维护区间和。 对于操作2,我的做法是另开n个队列维护每种食物被放入的先后顺序,当然树状数组+二分更快。 然后就差不多了,具体实现见代码: #include<queue> #incl...原创 2018-05-08 20:36:43 · 151 阅读 · 0 评论 -
BZOJ1216 [HNOI2003]操作系统(洛谷P2278)
堆 模拟 BZOJ题目传送门 洛谷题目传送门 搞个双关键字堆瞎模拟就好了。 代码: #include<queue> #include<cctype> #include<cstdio> #include<cstring> #include<algorithm> #define F inline #define N 15005 us...原创 2018-05-27 12:20:14 · 219 阅读 · 0 评论 -
洛谷P3963 [TJOI2013]奖学金
堆 题目传送门 首先这道题不可二分,自己YY一下挺显然的。 把每个人按照成绩排序,从大往小扫,用三个可删除的堆q1,q2,q3q1,q2,q3q1,q2,q3维护。q1,q3q1,q3q1,q3分别维护当前位置左右的前kkk大,q2q2q2维护左边不是前kkk大的,相当于q1q1q1的后备。 具体实现见代码: #include<queue> #inc...原创 2018-10-14 17:00:26 · 381 阅读 · 0 评论 -
洛谷P3573 [POI2014]RAJ-Rally(BZOJ3832)
拓扑排序 堆 洛谷题目传送门 BZOJ题目传送门 妙蛙 注意到这是一个DAG,那么我们可以一遍拓排求出从起点到iii为最长路ds[i]ds[i]ds[i]和iii到终点的最长路dt[i]dt[i]dt[i](s向所有入度为0的点连边,所有出度为0的点向t连边)。若一条最长路lll经过(u,v)(u,v)(u,v),那么必有l=ds[u]+dt[v]+1l=ds[u]+dt[v]+1l=ds[u]+...原创 2018-10-29 13:52:35 · 198 阅读 · 0 评论