Submission #1244017

#TimeUsernameProblemLanguageResultExecution timeMemory
1244017m5588ohammedTeam Contest (JOI22_team)C++20
0 / 100
2095 ms30920 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][2];
int n,inf=3e10;
array <int,6> arr[150001],Marr[150001];
int cnt=0;
void update(int i,int val,int u){
    i+=N;
    Tree[i][u]=max(Tree[i][u],val);
    i/=2;
    while(i!=0){
        Tree[i][u]=max(Tree[i*2][u],Tree[i*2+1][u]);
        i/=2;
    }
    return;
}

int solve(int l1,int r1,int i,int l,int r,int u){
    if(l1>r||l>r1) return -inf;
    if(l<=l1&&r1<=r) return Tree[i][u];
    return max(solve(l1,(l1+r1)/2,i*2,l,r,u),solve((l1+r1)/2+1,r1,i*2+1,l,r,u));
}
void compress(){
    set <int> comp;
    map <int,int> key;
    for(int i=1;i<=n;i++){
        comp.insert(arr[i][0]);
        comp.insert(arr[i][1]);
        comp.insert(arr[i][2]);
    }
    for(int i:comp){
        key[i]=++cnt;
    }
    for(int i=1;i<=n;i++) for(int u=0;u<=2;u++) arr[i][u]=key[arr[i][u]];
    return;
}
int calc(){
    for(int i=0;i<=N*2+4;i++) Tree[i][0]=Tree[i][1]=-inf;
    for(int i=1;i<=n;i++) arr[i]=Marr[i];
    compress();
    sort(arr+1,arr+n+1);
    // for(int i=1;i<=n;i++) cout<<arr[i][0]<<" "<<arr[i][1]<<" "<<arr[i][2]<<endl;
    // exit(0);
    int mx=-1;
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(arr[i][1]<=arr[j][1]) continue;
            int val=solve(0,N-1,1,0,arr[i][1]-1,0);
            if(val<=max(arr[i][5],arr[j][5])) continue;
            mx=max(mx,arr[j][3]+arr[i][4]+val);
        }
        for(int j=i+1;j<=n;j++){
            if(arr[i][2]<=arr[j][2]) continue;
            int val=solve(0,N-1,1,0,arr[i][2]-1,1);
            if(val<=max(arr[i][4],arr[j][4])) continue;
            mx=max(mx,arr[j][3]+arr[i][5]+val);
        }
        update(arr[i][1],arr[i][5],0);
        update(arr[i][2],arr[i][4],1);
    }
    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>>Marr[i][0]>>Marr[i][1]>>Marr[i][2];
        Marr[i][3]=Marr[i][0];
        Marr[i][4]=Marr[i][1];
        Marr[i][5]=Marr[i][2];
    }
    cout<<calc()<<endl;
}
#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...