#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; }