基礎算法-區間合併

#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
#define mem(f, x) memset(f,x,sizeof(f))
#define sca(x) scanf("%d", &x)
#define sca2(x,y) scanf("%d%d",&x,&y)
#define sca3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define scl(x) scanf("%lld",&x);
#define pri(x) printf("%d\n", x)
#define prl(x) printf("%lld\n",x);
#define ll long long
const int N=300010;
int n,m,x;
int a[N],s[N],b[N];
typedef pair<int ,int > PII;

struct  node{
 int l,r;
}e[111111];

bool cmp(node a,node b){
  if(a.l!=b.l)
     return a.l<b.l;
  else
    return a.r>b.r;
 }
int main(){
  cin>>n;
  for(int i=0;i<n;i++){
    cin>>e[i].l>>e[i].r;
  }
  sort(e,e+n,cmp);
  int res=1;
  int rr=e[0].r;
  for(int i=1;i<n;i++){
     if(e[i].l<=rr)
     {
         rr=max(rr,e[i].r);
     }
     else
     {
         res++;
         rr=e[i].r;
     }
  }
  cout<<res<<endl;
  return 0;
}

給定 nn 個區間 [li,ri][li,ri],要求合併所有有交集的區間。

注意如果在端點處相交,也算有交集。

輸出合併完成後的區間個數。

例如:[1,3]和[2,6]可以合併爲一個區間[1,6]。

輸入格式

第一行包含整數n。

接下來n行,每行包含兩個整數 l 和 r。

輸出格式

共一行,包含一個整數,表示合併區間完成後的區間個數。

數據範圍

1≤n≤1000001≤n≤100000,
−109≤li≤ri≤109−109≤li≤ri≤109

輸入樣例:

5
1 2
2 4
5 6
7 8
7 9

輸出樣例:

3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章