问题标题: 酷町堂:2777 90分

0
0
已解决
邹文昊
邹文昊
高级守护
高级守护
#include<bits/stdc++.h>
using namespace std;
int n,ed,cnt,t;
struct stu{
    int a,b;
}a[50005];
bool cmp(stu x,stu y){
    return x.a<y.a;
}
int main(){
    cin>>n;
    t=n;
    for(int i=1;i<=n;i++)cin>>a[i].a>>a[i].b;
    sort(a+1,a+1+n,cmp);
    ed=a[1].b;
    for(int i=2;i<=n;i++){
        if(a[i].a<=ed){ed=max(ed,a[i].b);t--;}
          else {cout<<t;return 0;}
    }
    cout<<t;
}

2777   区间合并

经验值:1200

时间限制:1000毫秒

内存限制:128MB

题目描述 Deion

区间是指具有左端点和右段点的,在左端点和右端点间所有数的集合。例如(2, 6)就是指2到6之间的所有数。现在给你n个区间,请你将它们合并成尽可能少的区间。区间合并的规则是,如果两个区间有公共部分,或者端点相连,则可以变成一个更大的区间。

输入描述 Input Deion

第一行,一个整数,n,表示有n个区间
接下来n行,每行两个整数,a b,表示区间(a, b)

输出描述 Output Deion

一个整数,表示合并之后还剩多少个区间

样例输入 Sample Input

4 1 5 2 4 1 4 2 3

样例输出 Sample Output

1

数据范围及提示 Data Size & Hint

n≤100


0
已采纳
张百川
张百川
新手光能
新手光能

把cmp改成

bool cmp(stu x,stu y){

if(x.a!=y.a)return x.b<y.b;

return x.b>y.b;

}

0
郭宇晨
郭宇晨
高级守护
高级守护

可以把t初值为1,因为至少会剩下1个区间;如果进了if,t不变;如果进了else,t加一;最后输出t

0
0
0
0
郭宇晨
郭宇晨
高级守护
高级守护

更新ed的值创造第二个区间(else也要……)

0
0
毕博雨
毕博雨
高级守护
高级守护

需要写else,用max求ed和a[i].d的较大值。

我要回答