周老师的区间问题

Description

周老师无聊时乱写了 n 个区间,但处女座的他随后又想将 n 个区间整理合并,但他发现区间太多了,于是他想请你帮帮他

Input

每次测试输入多组数据(小于100组),对于每组输入数据:

第一行为  n ,代表 n 个区间

接下来 n 行,每行两个数 s , t 代表区间 [s,t]

0 < n < 15000

0 <= s <= t < 10000000 

Output

第一行输出一个数字 q ,代表合并后剩余的区间个数

随后 q 行 按从小到大的顺序输出区间

Sample Input
3
2 4
1 3
7 7
Sample Output
2
1 4
7 7

#include<bits/stdc++.h>
using namespace std;
struct node{
    long long s;
    long long t;
}zone[15005];

bool cmp(node a,node b) {
    if(a.s!=b.s)
        return a.s < b.s;
    else
        return a.t < b.t;
}

int main()
{
    int n,ans;
    while(~scanf("%d",&n)) {
        ans =0;
        
        for(int i = 0; i < n; i++)    {
            scanf("%d %d",&zone[i].s,&zone[i].t);
        }
        
        sort(zone,zone+n,cmp);

        for(int i = 1; i < n; i++)    {
            if(zone[i].s <= zone[ans].t&&zone[ans].t < zone[i].t) {
                zone[ans].t = zone[i].t;
            }
            
            else if(zone[i].s <= zone[ans].t&&zone[ans].t >= zone[i].t) {
            
            }
            else if(zone[i].s > zone[ans].t) {
                ans++;
                zone[ans].s = zone[i].s;
                zone[ans].t = zone[i].t;
            }
        
                
        }
        
        cout<<ans+1<<endl;
        for(int i = 0; i <= ans; i++)
            printf("%lld %lld
",zone[i].s,zone[i].t);
        
        
    }
    return 0;
}
 
原文地址:https://www.cnblogs.com/jj81/p/8098556.html