This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
//#pragma GCC optimize("O3")
//#pragma GCC target("avx,avx2,fma")
#define sz(x) int((x).size())
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
using namespace std;
#define int ll
using ll = long long;
using ld = long double;  // or double, if TL is tight
using str = string; 
using ii = pair<int, int>;
using pl = pair<ll, ll>;
using vi = vector<int>;
using vll = vector<ll>;
struct om {
    int x, y, z;
};
struct AIB { /// maxim pe prefix
    int n;
    vi V;
    AIB(int N) : n(N + 1), V(N + 1, -1) {}
    void update(int p, int v) {
        ++p;
        while(p < n) {
            V[p] = max(V[p], v);
            p += p & -p;
        }
    }
    int query(int p) {
        int re = -1;
        ++p;
        while(p) {
            re = max(re, V[p]);
            p -= p & -p;
        }
        return re;
    }
};
struct Plan {
    int n;
    map<int, int> MY, MZ; /// normalizari pt coordonate
    AIB MaxY, MaxZ; /// Maximele pt coordonate, dar normalizate dupa cealalta coord
    Plan(int N, map<int, int> MY0, map<int, int> MZ0) : n(N),
        MY(MY0), MZ(MZ0), MaxY(N), MaxZ(N) {}
    ll test(int y, int z) {
        ll re = -1;
        ll v1 = MaxY.query(MZ[z] - 1); 
        if(v1 == -1 || v1 <= y) return -1;
        ll v2 = MaxZ.query(MY[y] - 1);
        if(v2 == -1 || v2 <= z) return -1;
        return v1 + v2;
    }
    void insert(int y, int z) {
        /// il leg pe y cu ceva mai mic ca el
        MaxZ.update(MY[y], z);
        MaxY.update(MZ[z], y);
    }
};
signed main() {
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int n;
    cin >> n;
    vector<om> V;
    vector<pair<int, int> >  X, Y, Z;
    for(int i = 0; i < n; ++i) {
        int x, y, z;
        cin >> x >> y >> z;
        V.push_back({x, y, z});
        X.push_back({x, i});
        Y.push_back({y, i});
        Z.push_back({z, i});
    }
    sort(all(X));
    sort(all(Y));
    sort(all(Z));
    stack<int> PX, PY, PZ;
    for(auto [v, p] : X) PX.push(p);
    for(auto [v, p] : Y) PY.push(p);
    for(auto [v, p] : Z) PZ.push(p);
    vector<bool> activ(n, 1);
    while(!PX.empty() && !PY.empty() && !PZ.empty()) {
        int x = PX.top(), y = PY.top(), z = PZ.top();
        if(!activ[x]) {
            PX.pop();
            continue;
        }
        if(!activ[y]) {
            PY.pop();
            continue;
        }
        if(!activ[z]) {
            PZ.pop();
            continue;
        }
        auto [x1, y1, z1] = V[x];
        auto [x2, y2, z2] = V[y];
        auto [x3, y3, z3] = V[z];
        if(y3 == y2 || x3 == x1) {
            activ[z] = 0;
            PZ.pop();
            continue;
        }
        if(x2 == x1 || z2 == z3) {
            activ[y] = 0;
            PY.pop();
            continue;
        }
        if(y1 == y2 || z1 == z3) {
            activ[x] = 0;
            PX.pop();
            continue;
        }
        cout << x1 + y2 + z3 << "\n";
        return 0;
    }
    cout << "-1\n";
    return 0;
}
Compilation message (stderr)
team.cpp: In member function 'll Plan::test(ll, ll)':
team.cpp:57:12: warning: unused variable 're' [-Wunused-variable]
   57 |         ll re = -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... |