제출 #925728

#제출 시각아이디문제언어결과실행 시간메모리
925728andrei_boacaTeam Contest (JOI22_team)C++17
17 / 100
2045 ms6096 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> pii; const int INF=1e9; int n; struct point { int x,y,z; } v[150005]; bool byx(point a,point b) { return a.x<b.x; } bool byy(pii a,pii b) { if(a.first!=b.first) return a.first>b.first; return a.second<b.second; } bool byz(pii a,pii b) { if(a.second!=b.second) return a.second>b.second; return a.first<b.first; } vector<pii> myy,myz; int main() { ios_base::sync_with_stdio(false); cin.tie(0); myy.push_back({-INF,INF}); myz.push_back({INF,-INF}); cin>>n; for(int i=1;i<=n;i++) cin>>v[i].x>>v[i].y>>v[i].z; int ans=-1; sort(v+1,v+n+1,byx); for(int i=1;i<=n;i++) { vector<point> a; int j=i; while(j<=n&&v[j].x==v[i].x) { a.push_back(v[j]); j++; } for(point p:a) { for(pii ymax:myy) { if(ymax.first<=p.y) continue; int z=-1; for(pii a:myz) if(a.first<ymax.first&&a.second>ymax.second) z=max(z,a.second); if(z>p.z) ans=max(ans,ymax.first+z+p.x); } for(pii zmax:myz) { if(zmax.second<=p.z) continue; int y=-1; for(pii a:myy) if(a.second<zmax.second&&a.first>zmax.first) y=max(y,a.first); if(y>p.y) ans=max(ans,zmax.second+y+p.x); } } for(point p:a) { myy.push_back({p.y,p.z}); sort(myy.begin(),myy.end(),byy); myy.erase(unique(myy.begin(),myy.end()),myy.end()); if(myy.size()>100) myy.pop_back(); myz.push_back({p.y,p.z}); sort(myz.begin(),myz.end(),byz); myz.erase(unique(myz.begin(),myz.end()),myz.end()); if(myz.size()>100) myz.pop_back(); } i=j-1; } cout<<ans; 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...