合并区间
#include <bits/stdc++.h> using namespace std; int n,l,r; typedef pair<int,int> P; vector<P> segs; const int INF=-2e9; void merge(vector<P> &segs){//合并函数 vector<P> ans; sort(segs.begin(),segs.end());//排序,pair先比first再second int st=INF,ed=INF;//初始化设为比无穷小 for(auto seg:segs){//遍历区间 if(ed<seg.first){//如果两邻近区间不相交 if(st!=INF) ans.push_back({st,ed});//现区间结束记录,但如果Seg是第一个st还是初始化要排除 st=seg.first, ed=seg.second;//替换现区间 }else ed=max(ed,seg.second);//如果两邻近区间有交集 } if(st!=INF)ans.push_back({l,r});//最后,最后一个区间要手动压入 segs=ans; } int main(int argc, char** argv) { cin>>n; for(int i=0;i<n;i++){ scanf("%d%d",&l,&r); segs.push_back({l,r});//记录区间 } merge(segs);//合并函数 ,Seg引用& cout<<segs.size()<<endl; return 0; }