
数据结构---堆
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 · 444 阅读 · 0 评论 -
BZOJ4458: GTY的OJ
贪心 ST表 堆题目传送门树上的超级钢琴,我们只需要建树上的ST表即可,稍微复杂了点。代码:#include#include#include#include#include#include#define N 500005#define lg 19#define il inlineusing namespace std;typedef long long LL原创 2018-01-20 16:08:48 · 424 阅读 · 0 评论 -
BZOJ1029 [JSOI2007]建筑抢修(洛谷P4053)
贪心 堆BZOJ题目传送门 洛谷题目传送门首先按照T2从小到大排序,然后扫一遍过去进行贪心。如果当前时间能抢修的就抢修,并把T1加到堆里。否则和堆顶比较,如果堆顶>T1就把堆顶拿出来,把T1加进去。这么做是为了减少时间。代码:#include<queue>#include<cctype>#include<cstdio>#incl...原创 2018-02-09 16:27:15 · 288 阅读 · 0 评论 -
BZOJ5132: [CodePlus2017年12月]火锅盛宴(洛谷P4032)
堆 线段树BZOJ题目传送门 洛谷题目传送门这道题有蛮多种做法的,但大体是堆+线段树/树状数组我们把生的和熟的分开维护。生的用一个堆维护时间,每次读入时间后把熟了的转移到线段树上去,线段树维护区间和。对于操作2,我的做法是另开n个队列维护每种食物被放入的先后顺序,当然树状数组+二分更快。然后就差不多了,具体实现见代码:#include<queue>#incl...原创 2018-05-08 20:36:43 · 182 阅读 · 0 评论 -
BZOJ1216 [HNOI2003]操作系统(洛谷P2278)
堆 模拟BZOJ题目传送门 洛谷题目传送门搞个双关键字堆瞎模拟就好了。代码:#include<queue>#include<cctype>#include<cstdio>#include<cstring>#include<algorithm>#define F inline#define N 15005us...原创 2018-05-27 12:20:14 · 246 阅读 · 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 · 419 阅读 · 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 · 262 阅读 · 0 评论