//code by virtualtan 2018 寒7
## 区间不相交
```c
#include <cstdio>
#include <algorithm>

#define MAXN 1111

using namespace std;

struct node {
    int l, r;
}a[MAXN];

int cmp(node x, node xx) {
    if(x.r != xx.r) return x.r < xx.r; //从小到大排序就用 ‘<’
    return x.l > xx.l;//优先选择右端点小的   若右端点相等  优先左端点大的
}

int n, ans;

int main() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) scanf("%d%d", &a[i].l, &a[i].r);
    sort(a + 1, a + 1 + n, cmp);
//    for(int i = 1; i <= n; i++) printf("> %d  %d\n", a[i].l, a[i].r);
    int R = -2033333333;
//             2147483647
    for(int i = 1; i <= n; i++) {
        if(R <= a[i].l) {
            ans++;
            R = a[i].r;//更新 限制区间左端点 的数
        }
    }
    printf("%d", ans);
    return 0;
}


```


## 区间覆盖

```c
#include <cstdio>
#include <algorithm>

#define MAXN 1111

using namespace std;

struct node {
    int l, r;
}a[MAXN];

int cmp(node x, node xx) {
    return x.l < xx.l;
}

int n, ans;

int main() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) scanf("%d%d", &a[i].l, &a[i].r);
    sort(a + 1, a + 1 + n, cmp);
    int R = 1;
    int rr = 0;
    for(int i = 1; i <= n; i++) {0
        if(a[i].l <= R) rr = max(rr, a[i].r);
        if(R > n) break;
        if(a[i + 1].l > R || i == n) {
            R = rr + 1;//rr 是 已成立的 区间中 最大区间 的右端点
                       //R是:需要:覆盖区间的左端点 又因为rr 已被覆盖  所以不能写 R == rr
            ans++;
        }
        printf("%d %d %d\n", i, ans, R);
    }
    printf("%d", ans);
    return 0;
}

```


扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。