#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define MAXN (1000005)
int main(){
ios_base::sync_with_stdio(false);cin.tie(0);
ll N;
cin>>N;
pair<ll,pair<ll,ll> > arr[N]; //X, Y, Z
set<pair<ll,ll> > sortX, sortY, sortZ;
for(ll i = 0;i < N;i++){
cin>>arr[i].first>>arr[i].second.first>>arr[i].second.second;
sortX.insert({arr[i].first,i});
sortY.insert({arr[i].second.first,i});
sortZ.insert({arr[i].second.second,i});
}
ll ans = -1e18;
while(!sortX.empty()){
ll A = prev(sortX.end())->second;
ll B = prev(sortY.end())->second;
ll C = prev(sortZ.end())->second;
if(A == B || A == C){ //remove A
auto it1 = sortX.find({arr[A].first,A});
sortX.erase(it1);
auto it2 = sortY.find({arr[A].second.first,A});
sortY.erase(it2);
auto it3 = sortZ.find({arr[A].second.second,A});
sortZ.erase(it3);
}else if(B == C){ //remove B
auto it1 = sortX.find({arr[B].first,B});
sortX.erase(it1);
auto it2 = sortY.find({arr[B].second.first,B});
sortY.erase(it2);
auto it3 = sortZ.find({arr[B].second.second,B});
sortZ.erase(it3);
}else if(prev(sortX.end())->first == arr[prev(sortY.end())->second].first){ //remove A
auto it1 = sortX.find({arr[B].first,B});
sortX.erase(it1);
auto it2 = sortY.find({arr[B].second.first,B});
sortY.erase(it2);
auto it3 = sortZ.find({arr[B].second.second,B});
sortZ.erase(it3);
}else if(prev(sortX.end())->first == arr[prev(sortZ.end())->second].first){ //remove A
auto it1 = sortX.find({arr[C].first,C});
sortX.erase(it1);
auto it2 = sortY.find({arr[C].second.first,C});
sortY.erase(it2);
auto it3 = sortZ.find({arr[C].second.second,C});
sortZ.erase(it3);
}else if(prev(sortY.end())->first == arr[prev(sortX.end())->second].second.first){ //remove B
auto it1 = sortX.find({arr[A].first,A});
sortX.erase(it1);
auto it2 = sortY.find({arr[A].second.first,A});
sortY.erase(it2);
auto it3 = sortZ.find({arr[A].second.second,A});
sortZ.erase(it3);
}else if(prev(sortY.end())->first == arr[prev(sortZ.end())->second].second.first){ //remove B
auto it1 = sortX.find({arr[C].first,C});
sortX.erase(it1);
auto it2 = sortY.find({arr[C].second.first,C});
sortY.erase(it2);
auto it3 = sortZ.find({arr[C].second.second,C});
sortZ.erase(it3);
}else if(prev(sortZ.end())->first == arr[prev(sortX.end())->second].second.second){ //remove C
auto it1 = sortX.find({arr[A].first,A});
sortX.erase(it1);
auto it2 = sortY.find({arr[A].second.first,A});
sortY.erase(it2);
auto it3 = sortZ.find({arr[A].second.second,A});
sortZ.erase(it3);
}else if(prev(sortZ.end())->first == arr[prev(sortY.end())->second].second.second){ //remove C
auto it1 = sortX.find({arr[B].first,B});
sortX.erase(it1);
auto it2 = sortY.find({arr[B].second.first,B});
sortY.erase(it2);
auto it3 = sortZ.find({arr[B].second.second,B});
sortZ.erase(it3);
}else{
ans = arr[A].first + arr[B].second.first + arr[C].second.second;
break;
}
}
if(ans == -1e18) cout<<-1<<'\n';
else cout<<ans<<'\n';
}
# | 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... |