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