ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

小根堆解决问题(蓝桥杯--负载均衡--线段区间问题)

2022-01-24 16:00:46  阅读:186  来源: 互联网

标签:priority 队列 -- queue 蓝桥 int 小根堆 include 算力


1.首先解释一下大根堆小根堆的表示方法:

 priority_queue<int> a; 
    //等同于 priority_queue<int, vector<int>, less<int> > a;
当然也可以定义小根堆:
priority_queue<int, vector<int>, greater<int> > c;  //这样就是小顶堆

也可以将pair加入到其中:

将pair加入到队列中:
priority_queue<pair<int, int> > a;//先比较first 再比较second 

对于优先队列的操作:
top 访问队头元素
empty 队列是否为空
size 返回队列内元素个数
push 插入元素到队尾 (并排序)
emplace 原地构造一个元素并插入队列
pop 弹出队头元素
swap 交换内容

题目:

3492. 负载均衡 - AcWing题库

代码:

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
typedef pair<int, int> PII;
const int maxx=2e6+10;
int v[maxx];
priority_queue<PII, vector<PII>, greater<PII> > p[maxx];//结束时刻,算力
int main(){
    int n,m;
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&v[i]);
    }
    for(int i=0;i<m;i++){
        int a,b,c,d;
        scanf("%d %d %d %d",&a,&b,&c,&d);
        while(p[b].size()&&p[b].top().first<=a){
            v[b]+=p[b].top().second;
            p[b].pop();
        }//在中间是不是可以恢复一部分算力不重要 重要的是能不能开始
        if(v[b]>=d){
            printf("%d\n",v[b]-d);
            p[b].push({a+c,d});//存入的应该是当前任务消耗的算力,不是现在的算力
            v[b]-=d;
        }else{
            printf("-1\n");
        }

    }
}

 

标签:priority,队列,--,queue,蓝桥,int,小根堆,include,算力
来源: https://www.cnblogs.com/bonel/p/15839743.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有