제출 #1244171

#제출 시각아이디문제언어결과실행 시간메모리
1244171m5588ohammedTeam Contest (JOI22_team)C++20
27 / 100
122 ms10440 KiB
#include <bits/stdc++.h>
#define endl "\n"
#define mod 1000000007
using namespace std;
#define int long long
const int N=(1<<19);
int Tree[N*2+5],valY[301],ansY[301],valZ[301];
int n,inf=3e10;
array <int,3> arr[150001];
int calc(){
    for(int i=0;i<=300;i++){
        ansY[i]=valY[i]=-inf;
        valZ[i]=inf;
    }
    vector <array<int,2>> v[301];
    for(int i=1;i<=n;i++){
        v[arr[i][0]].push_back({arr[i][1],arr[i][2]});
    }
    int mx=-1;
    for(int x=0;x<=300;x++){
        for(auto [Yc,Zc]:v[x]){
            for(int Y=Yc+1;Y<=300;Y++){
                if(ansY[Y]>Zc&&ansY[Y]>valZ[Y]) mx=max(mx,ansY[Y]+Y+x);
            } 
        }
        for(auto [Yc,Zc]:v[x]){
            valY[Yc]=max(valY[Yc],Zc);
            valZ[Yc]=min(valZ[Yc],Zc);
            for(int Y=Yc+1;Y<=300;Y++){
                ansY[Y]=max(ansY[Y],valY[Yc]);
            }
        }
    }
    return mx;
}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>arr[i][0]>>arr[i][1]>>arr[i][2];
    }
    int ans1=calc();
    for(int i=1;i<=n;i++) swap(arr[i][1],arr[i][2]);
    cout<<max(ans1,calc());
}
#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...