题解 | #线段重合#
线段重合
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++##悬赏#
牛客竞赛题解 文章被收录于专栏
个人向题解,用于存档