#10~14 #17~20 TLE
查看原帖
#10~14 #17~20 TLE
602161
ET_theStarSky楼主2022/12/19 09:31

#include <bits/stdc++.h>
#include <set>
#include <vector>
using namespace std;

struct plane{
    int get;
    int go;
    bool operator<(const plane &a)const{return get<a.get;}
    bool operator>(const plane &a)const{return get>a.get;}
    bool operator==(const plane &a)const{return get==a.get and go==a.go;}
};

set<plane> p1;
set<plane> p2;
int plns1[100000]={},plns2[100000]={};
int n,m1,m2;
int main(){
    cin>>n>>m1>>m2;
    for(int i=0;i<m1;i++){
        plane* p=new plane;
        cin>>p->get>>p->go;
        p1.insert(*p);
    }
    for(int i=0;i<m2;i++){
        plane* p=new plane;
        cin>>p->get>>p->go;
        p2.insert(*p);
    }
    vector<plane> v;
    set<plane>::iterator it;
    for(int i=1;i<=n;i++){
        int time=-1;
        for(it=p1.begin();it!=p1.end() and !p1.empty();it++){
            if(time<(*it).get){
                plns1[i]++;
                time=(*it).go;
                v.push_back(*it);
            }
        }
        vector<plane>::iterator vt;
        for(vt=v.begin();vt!=v.end();vt++){
            p1.erase(*vt);
        }
        v.clear();
    }
    for(int i=1;i<=n;i++){
        int time=-1;
        for(it=p2.begin();it!=p2.end() and !p2.empty();it++){
            if(time<(*it).get){
                plns2[i]++;
                time=(*it).go;
                v.push_back(*it);
            }
        }
        vector<plane>::iterator vt;
        for(vt=v.begin();vt!=v.end();vt++){
            p2.erase(*vt);
        }
        v.clear();
    }
    for(int i=0;i<n;i++){
    //cout<<plns1[i+1]<<' '<<plns2[i+1]<<endl;
        plns1[i+1]+=plns1[i];
        plns2[i+1]+=plns2[i];
        //cout<<plns1[i+1]<<' '<<plns2[i+1]<<endl;
    }

    int ans=0;
    for(int i=0;i<=n;i++){
        ans=max(ans,plns1[i]+plns2[n-i]);
        //cout<<ans<<endl;
    }
    cout<<ans;
}


2022/12/19 09:31
加载中...