Codeforces

来源:互联网 发布:懒人淘宝商城 编辑:程序博客网 时间:2024/06/06 17:25

Two TVs
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Polycarp is a great fan of television.

He wrote down all the TV programs he is interested in for today. His list contains n shows, i-th of them starts at moment li and ends at moment ri.

Polycarp owns two TVs. He can watch two different shows simultaneously with two TVs but he can only watch one show at any given moment on a single TV. If one show ends at the same moment some other show starts then you can't watch them on a single TV.

Polycarp wants to check out all n shows. Are two TVs enough to do so?

Input

The first line contains one integer n (1 ≤ n ≤ 2·105) — the number of shows.

Each of the next n lines contains two integers li and ri (0 ≤ li < ri ≤ 109) — starting and ending time of i-th show.

Output

If Polycarp is able to check out all the shows using only two TVs then print "YES" (without quotes). Otherwise, print "NO" (without quotes).

Examples
input
31 22 34 5
output
YES
input
41 22 32 31 2
output
NO



题意:给你两个电视机和一串节目的播放时间表,问你能不能把全部电视节目都看完。就是你可以同时看两个节目,看能不能全部都看完,端点情况注意考虑。


解题思路:第一反应使用线段树,但会超时。后来想了想,直接模拟就好了!先对区间按开始时间排序,开始时间相同,结束早的在前。然后开始模拟看电视的过程就好了。要设定两个标记,分别为两台电视机是否在使用。还有两个结束时间标记,用于更新电视机的状态,详细看代码。



#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include<map>using namespace std;struct len{    int l;    int r;}list[200005];bool cmp(len a,len b){    if(a.l==b.l)        return a.r<b.r;    return a.l<b.l;}int main(){    int n;    cin>>n;    for(int i=0;i<n;i++)    {        scanf("%d%d",&list[i].l,&list[i].r);    }    sort(list,list+n,cmp);    bool one=false;    bool two=false;    int oneend=-1;    int twoend=-1;    for(int i=0;i<n;i++)    {        if(oneend<list[i].l)            one=false;        if(twoend<list[i].l)            two=false;        if(one&&two){            cout<<"NO"<<endl;            return 0;        }        if(one){            two=true;            twoend=list[i].r;            continue;        }        else{            one=true;            oneend=list[i].r;            continue;        }    }    cout<<"YES"<<endl;    return 0;}