题解 | #线段重合#

线段重合

https://www.nowcoder.com/practice/1ae8d0b6bb4e4bcdbf64ec491f63fc37

#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;

int n;
struct line
{
	int l;
	int r;
}lin[100005];//用结构体存储线段,方便排序

bool cmp(line l1,line l2)//按线段左端点升序排序
{
	return l1.l < l2.l;
}

int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>lin[i].l>>lin[i].r;
		
	sort(lin,lin+n,cmp);
	priority_queue<int, vector<int>, greater<int>> que;//优先队列模拟小根堆
	int ans=1;
	
	for(int i=0;i<n;i++)
	{
	  //将小根堆里面小于等于<= 第i条线段的左端点l 的值去除
		while(!que.empty() && que.top() <= lin[i].l)//注:!que.empty()应放在前面,否则段错误
			que.pop();
		
		que.push(lin[i].r);//插入第i条线段的右端点
		int res=que.size();//小根堆(优先队列)的大小即为重合的线段条数
		ans=max(ans,res);//取大的
	}
	cout<<ans;
}

#堆排序小根堆##优先队列的应用##STL##c++##悬赏#
牛客竞赛题解 文章被收录于专栏

个人向题解,用于存档

全部评论

相关推荐

lingo12:1.最好加个业务项目,大部分面试官工作以后会更偏重业务 2.实习部分描述一般般,可能hr看到会觉得你产出不够不给你过简历 3.蓝桥杯这些大部分人都有的,不如不写,反而减分项。
点赞 评论 收藏
分享
01-21 12:26
暨南大学 golang
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务