제출 #688153

#제출 시각아이디문제언어결과실행 시간메모리
688153Darren0724Team Contest (JOI22_team)C++17
100 / 100
219 ms19996 KiB
#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define pii pair<int,int>
#define all(x) x.begin(),x.end()
const int INF=1e9;

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n;cin>>n;
    vector<pair<int,pii>> v(n);
    for(int i=0;i<n;i++){
        cin>>v[i].x>>v[i].y.x>>v[i].y.y;
    }
    sort(all(v));
    vector<pii> q;
    set<pii> s,c,c1;
    int ans=-1;
    for(int i=0;i<n;i++){
        pii t=v[i].y;
        if(i>0&&v[i].x>v[i-1].x){
            //random_shuffle(all(q));
            for(auto t:q){
                auto it=c.lower_bound({t.x,0});
                if(it!=c.begin()&&(*prev(it)).y>t.y){
                    continue;
                }
                c.insert(t);
                it=c.lower_bound(t);
                it++;
                while(it!=c.end()){
                    if(t.y>=(*it).y){
                        c.erase(it);
                        it=c.lower_bound(t);
                        it++;
                    }
                    else{
                        break;
                    }
                }
            }
            for(auto t:q){
                auto it=c.lower_bound({t.x,0});
                int tmp=-1;
                if(it!=c.begin()&&(*prev(it)).y>t.y){
                    tmp=(*prev(it)).y;
                }
                if(tmp==-1){
                    continue;
                }
                //cout<<tmp<<endl;
                s.insert({t.x,tmp});
            }
            for(auto t:q){
                swap(t.x,t.y);
                auto it=c1.lower_bound({t.x,0});
                if(it!=c1.begin()&&(*prev(it)).y>t.y){
                    continue;
                }
                c1.insert(t);
                it=c1.lower_bound(t);
                it++;
                while(it!=c1.end()){
                    if(t.y>=(*it).y){
                        c1.erase(it);
                        it=c1.lower_bound(t);
                        it++;
                    }
                    else{
                        break;
                    }
                }
            }
            for(auto t:q){
                swap(t.x,t.y);
                auto it=c1.lower_bound({t.x,0});
                int tmp=-1;
                if(it!=c1.begin()&&(*prev(it)).y>t.y){
                    tmp=(*prev(it)).y;
                }
                if(tmp==-1){
                    continue;
                }
                s.insert({tmp,t.x});

            }
            while(s.size()>1){
                s.erase(s.begin());
            }
            q.clear();
        }
        q.push_back(v[i].y);
        auto it=s.upper_bound({t.x,INF});
        if(it==s.end()||(*it).y<=t.y){
            continue;
        }
        //cout<<v[i].x<<' '<<(*it).x<<' '<<(*it).y<<endl;
        ans=max(ans,v[i].x+(*it).x+(*it).y);
    }
    /*for(auto e:c1){
        cout<<e.x<<' '<<e.y<<endl;
    }
    for(auto e:s){
        cout<<e.x<<' '<<e.y<<endl;
    }*/
    cout<<ans<<endl;

    return 0;
}
/*
5
1 4 3
3 1 2
5 5 1
4 2 4
2 3 5
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...