Submission #634560

#TimeUsernameProblemLanguageResultExecution timeMemory
634560Darren0724Team Contest (JOI22_team)C++17
35 / 100
598 ms8156 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin(),x.end()
#define pii pair<int,int>
#define rz resize
#define pb emplace_back
int INF=1e18;
int mod=1e9+7;
int N=4010;

signed main(){
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n;cin>>n;
  if(n<=300){
    vector<int> a(n),b(n),c(n);
    for(int i=0;i<n;i++){
      cin>>a[i]>>b[i]>>c[i];
    }
    int ans=-1;
    for(int i=0;i<n;i++){
      for(int j=0;j<n;j++){
        for(int k=0;k<n;k++){
          if(i==j||j==k||i==k){
            continue;
          }
          if(a[i]<=a[j]||a[i]<=a[k]||b[j]<=b[i]||b[j]<=b[k]||c[k]<=c[i]||c[k]<=c[j]){
            continue;
          }
          ans=max(ans,a[i]+b[j]+c[k]);
        }
      }
    }
    cout<<ans<<endl;
    return 0;
  }
  vector<int> a(n),b(n),c(n);
  vector<vector<pii>> v(N+1);
  for(int i=0;i<n;i++){
    cin>>a[i]>>b[i]>>c[i];
    v[a[i]].push_back({b[i],c[i]});
  }
  vector<int> rec(N+2,-INF),rec1(N+2,-INF);
  int ans=-INF;
  for(int i=1;i<=N;i++){
    for(auto p:v[i]){
      for(int j=p.first+1;j<=N+1;j++){
        if(rec1[j]>p.second)ans=max(ans,i+j+rec1[j]);
      }
    }
    for(auto p:v[i]){
      rec[p.first+1]=max(rec[p.first+1],p.second);
    }
    for(int j=1;j<=N;j++){
      rec[j]=max(rec[j],rec[j-1]);
    }
    for(auto p:v[i]){
      if(rec[p.first]>p.second){
        rec1[p.first]=max(rec[p.first],rec1[p.first]);
      }
    }
    for(int j=N-1;j>=0;j--){
      rec1[j]=max(rec1[j],rec1[j+1]);
    }
  }
  if(ans<0){
    cout<<-1<<endl;
  }
  else{
    cout<<ans<<endl;
  }

  return 0;
}

#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...