为啥wa90?删除覆盖区间

#include <bits/stdc++.h>
using namespace std;
long long l[1005], r[1005];
int main() {
    long long n;
    cin>>n;
    for(int i=1;i<=n;i++) {
        cin>>l[i]>>r[i];
    }
    // 对区间按左边界升序排序,如果左边界相同,则按右边界升序排序
    for(int i=1;i<=n;i++) {
        for(int j=i+1;j<=n;j++) {
            if(l[i]>l[j]||(l[i]==l[j]&&r[i]>r[j])){
                swap(l[i],l[j]);
                swap(r[i],r[j]);
            }
        }
    }
    int cnt=0; // 被覆盖的区间数量
    int b=l[1],e=r[1]; // 初始区间设为第一个区间
    for(int i=2;i<=n;i++){
        // 如果当前区间被前一个区间覆盖
        if(l[i]>=b&&r[i]<=e){
            cnt++;
        } else{
            // 如果当前区间的左边界大于等于b但右边界大于e,或者左边界大于e
            // 这表示当前区间部分或完全不被前一个区间覆盖
            if(l[i]>=b&&r[i]>e) {
                e=r[i]; // 更新结束边界
            } else if(l[i]>e) {
                b=l[i]; // 遇到完全不重叠的新区间,更新开始和结束边界
                e=r[i];
            }
        }
    }
    cout<<n-cnt<<endl; // 输出未被覆盖的区间数量
    return 0;
}

1 个赞

這是什麽排序, 另外排序关键字, 按L[i]的大小为第一关键字进行升序,按R[i]的大小为第二关键字进行降序

2 个赞

冒泡的变形

1 个赞