原题链接
题意
思路
1.这道题还是很好想到贪心的,题中看到左右两个端点,可以想到贪心的区间覆盖问题,这道题只是在这个基础变成了两个区域,但实际难度反而减小了
2.我们先将所有的区间按照左端点排序,然后进行遍历,每次比较左端点,更新右端点就好,不满足条件直接输出NO
3.具体看代码
AC代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef pair<int,int> PII;
int n;
vector<PII> v;bool cmp(PII a,PII b){return a.first<b.first;
}
int main(){cin>>n;for(int i=1;i<=n;i++){int l,r;cin>>l>>r;v.push_back({l,r});}sort(v.begin(),v.end(),cmp);//代表两个区间int index1=-1;int index2=-1;for(PII p:v){if (p.first>index1){//只要大于末端,说明上一个区间已经结束index1=p.second;}else{//说明上一个区间还在继续,只能放到第二个区间if (p.first>index2){ // 说明第二个的区间已经结束index2=p.second;}else{//第二的区间也没有结束,只能输出NOcout<<"NO"<<endl;return 0;}}}cout<<"YES"<<endl;return 0;
}