#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 个赞