admin管理员组文章数量:1623790
在优先队列中,优先级高的元素先出队列。其模板声明带有三个参数,priority_queue<Type, Container, Functional>, 其中Type为数据类型,Container为保存数据的容器,Functional为元素比较方式。
priority_queue(),默认按照从小到大排列。
加上greater<>后,数据从大到小排列,top()返回的就是最小值而不是最大值!
小根堆代表每个节点要比它的左右子节点小,因此根节点是最小的。大根堆相反.
例如: priority_queue<int ,vector<int>, greater<int> > heap;代表声明了一个用vector存的int类型的小根堆。
如果大家想更熟悉的了解优先队列的用法,我推荐做一道题来练手。
区间分组
给定 NN 个闭区间 [ai,bi][ai,bi],请你将这些区间分成若干组,使得每组内部的区间两两之间(包括端点)没有交集,并使得组数尽可能小。
输出最小组数。
输入格式
第一行包含整数 NN,表示区间数。
接下来 NN 行,每行包含两个整数 ai,biai,bi,表示一个区间的两个端点。
输出格式
输出一个整数,表示最小组数。
数据范围
1≤N≤1051≤N≤105,
−109≤ai≤bi≤109−109≤ai≤bi≤109
输入样例:
3
-1 1
2 4
3 5
输出样例:
2
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
struct Range{
int l,r;
bool operator<(const Range &W) const
{
return l<W.l;
}
}range[N];
int n;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int l,r;
scanf("%d%d",&range[i].l,&range[i].r);
}
sort(range,range+n);
priority_queue<int,vector<int>, greater<int>> heap;
for(int i=0;i<n;i++)
{
auto t=range[i];
if(heap.empty()||heap.top()>=t.l) heap.push(t.r);
else
{
heap.pop();
heap.push(t.r);
}
}
printf("%d",heap.size());
return 0;
}
本文标签: 队列priorityqueue
版权声明:本文标题:C++ priority_queue优先队列的用法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728895721a1178382.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论