#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int n,mark[200009];
struct Bros {
int x,y,z,id;
} a[200009],b[200009],c[200009];
bool check(Bros X,Bros Y,Bros Z)
{
if(X.id==Y.id or X.id==Z.id or Y.id==Z.id) return false;
if(X.x<=max(Y.x,Z.x)) return false;
if(Y.y<=max(X.y,Z.y)) return false;
if(Z.z<=max(X.z,Y.z)) return false;
return true;
}
int main() //My dirty algo
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n;
for(int x,y,z,i=1;i<=n;++i)
{
cin>>x>>y>>z;
a[i]=b[i]=c[i]={x,y,z,i};
}
sort(a+1,a+n+1,[&](Bros P,Bros Q){return P.x<Q.x;});
sort(b+1,b+n+1,[&](Bros P,Bros Q){return P.y<Q.y;});
sort(c+1,c+n+1,[&](Bros P,Bros Q){return P.z<Q.z;});
for(int i=n,j=n,k=n;min({i,j,k})>0;)
{
if(check(a[i],b[j],c[k]))
{
cout<<a[i].x+b[j].y+c[k].z;
return 0;
}
if(a[i].y>=b[j].y or a[i].z>=c[k].z) mark[a[i].id]=1;
if(b[j].x>=a[i].x or b[j].z>=c[k].z) mark[b[j].id]=1;
if(c[k].x>=a[i].x or c[k].y>=b[j].y) mark[c[k].id]=1;
while(i>0 and mark[a[i].id]) --i;
while(j>0 and mark[b[j].id]) --j;
while(k>0 and mark[c[k].id]) --k;
//cerr<<i<<" "<<j<<" "<<k<<endl;
}
cout<<-1;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |