将两个数组排序 枚举第一个 并在第二个中从前到后判断 动态维护两个数组的和 如果当前这个加和已经大于堆的最大值就跳出循环 优化时间复杂度最后倒序输出即可#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 5; int read() { int x = 0 , f = 1; char ch = getchar();...
vis表示是否正在被访问 每次询问开始前 弹出与该询问时间距离大于等于600s的内存 并判断与其lstvis是否吻合 如果吻合更新vis并放入空闲堆 每次申请新的时 从空闲堆中取出编号最小 vis改为1 更新lstvis 插入堆 每次询问 直接查询vis并更新lstvis 并且把新的插入堆 然后喜获 90pts 因为如果有两个在同一时间询问对象...
YBTOJ 家庭作业(堆的应用) 一个很水的大根堆+贪心。 考虑将所有作业先按照截至日期升序排序,依次加入tot中,同时插入堆中,堆是在a意义下的大根堆。 若tot大于当前作业的截止日期,则取出之前以加入的作业中a最大的作业,进行加速,直到tot=当前作业的截止日期。 正确性很显然:如果不让截止日期小的作业尽量早地完成,...
写两个小根堆,第一个堆heap1存储未被占用的点的编号,第二堆heap2存储被占用的点开始被占用的时间。 每次输入得到一个当前时间n,则不断地取出heap2的堆顶,若堆顶已经不再被占用,则将其插入heap1中,直到出现一个仍被占用的点,则循环结束。 然后再判断要求的操作,若为请求占用空间,则取出heap1堆顶,插入heap2...
YbtOj例题:二叉堆3 龙珠游戏 STL优先队列写法 #include<bits/stdc++.h> using namespace std; const int N=1e5+5; int n,ne[N]; struct node{ int val,pos; bool operator < (const node &G) const { return val<G.val; } }a[N]; bool used[N]; priority_queue<node> q; int main() { ...