区间合并的含义是指:
 给定若干个区间,如果某两个区间含有交集的话,
 那么将这两个区间进行并集(合并),最终求合并后有多少个区间。
 注:通常来说,只有端点相接的两个区间也算含有交集
 例:
1 2 3 4 5 6 7 8 9
|_|
| |___|
| |   | |_|
| |   | | | |_|
| |   | | | |_|_|
|_____| |_| |___|
合并后区间,共有三个
方法
 
    
     
      
       
        1
       
      
      
       1
      
     
    1.按区间左端点排序
 
    
     
      
       
        2
       
      
      
       2
      
     
    2.扫描整个区间,将所有可能有交集的区间进行合并
 具体:
 假设已经扫描了第
    
     
      
       
        i
       
      
      
       i
      
     
    i个区间,那么会有以下三种关系
|________________|
l1                r1
1.   |_______|      在里面
     l2      r2     合并后L=l1,R=r1
2.    |_______________|   有一部分交集
      l2              r2   合并后L=l1,R=r2
3.                    |_________|   无交集
                      l2        r2   不会合并
实际应用:
 
    
     
      
       
        A
       
       
        C
       
       
        W
       
       
        i
       
       
        n
       
       
        g
       
      
      
       ACWing
      
     
    ACWing 
    
     
      
       
        803.
       
      
      
       803.
      
     
    803.区间合并
 模拟样例:
  1 2 3 4 5 6 7 8 9
1 |_|
2 | |___|
3 | |   | |_|
4 | |   | | | |_|
5 | |   | | | |_|_|
首先,维护区间 1 1 1,区间 1 1 1和区间 2 2 2出现了情况 2 2 2,所以两个区间合并为一个区间
 |_____|
然后,区间 3 3 3和区间 1 1 1 ~ 2 2 2为情况三,由于所有左端点已经被排序了,所以区间 1 1 1 ~ 2 2 2不会与其他区间产生交集,所以,将区间 1 1 1 ~ 2 2 2加入至答案中。
 |_____| |_|
     |
     |
<-----
此时,维护区间 3 3 3,区间 4 4 4和区间 3 3 3为情况三,同上一步,所以区间 3 3 3也不会与其他区间产生交集,所以将区间 3 3 3加入至答案中。
  |_____| |_| |_|
     |     |
     |     |
<-----     |
<-----------
然后,维护区间 4 4 4,区间 4 4 4和区间 5 5 5为情况 2 2 2,所以两个区间合并为一个区间,由于后面没有区间了,所以将区间 4 4 4 ~ 5 5 5也加入至答案中。
  |_____| |_| |___|
     |     |    | 
     |     |    |
<-----     |    |
<-----------    |
<----------------
最终,合并后有
    
     
      
       
        3
       
      
      
       3
      
     
    3个没有任何交集的区间,输出
    
     
      
       
        3
       
      
      
       3
      
     
    3
 代码:
#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef pair<int,int> PII;
const int N = 100010;
int n;
vector<PII> segs;
const int INF=2e9;
void merge(vector<PII> &segs){
    vector<PII> res;
    sort(segs.begin(),segs.end());
    int st=-INF,ed=-INF;
    for(auto seg:segs){
        if(ed<seg.x){
            if(st!=-INF) res.push_back({st,ed});
            st=seg.x,ed=seg.y;
        }else{
            ed=max(ed,seg.y);
        }
    }
    if(st!=-INF) res.push_back({st,ed});
    segs=res;
}
int main(){
    cin >> n;
    for(int i=0;i<n;i++){
        int l,r;
        cin >> l >> r;
        segs.push_back({l,r});
    }
    merge(segs);
    cout << segs.size() << endl;
}










