제출 #545057

#제출 시각아이디문제언어결과실행 시간메모리
545057baluteshihTeam Contest (JOI22_team)C++14
100 / 100
140 ms16048 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define X first
#define Y second
#define SZ(a) ((int)a.size())
#define ALL(v) v.begin(), v.end()
#define pb push_back

struct Node {
    int x, y, z;
    bool operator<(const Node &a) const {
        return x > a.x;
    }
} arr[150005];

multiset<pii> yst, zst;

void insert(multiset<pii> &st, pii &mx, pii val) {
    auto p = st.lower_bound(pii(val.X, val.Y));
    while (p != st.end() && p->Y <= val.Y)
        p = st.erase(p);
    if (p == st.begin())
        st.insert(val);
    else {
        if (prev(p)->Y < val.Y)
            st.insert(val);
        else if (prev(p)->Y > val.Y) {
            if (mx.X + mx.Y < val.X + prev(p)->Y)
                mx = pii(val.X, prev(p)->Y);
        }
    }
}

int main() {
    ios::sync_with_stdio(0), cin.tie(0);
    int n;
    int ans = -1;
    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> arr[i].x >> arr[i].y >> arr[i].z;
    sort(arr + 1, arr + n + 1);
    pii ymx = pii(-1, -1);
    pii zmx = pii(-1, -1);
    for (int i = n, j = n; i >= 1; --i) {
        while (arr[j].x < arr[i].x) {
            insert(yst, ymx, pii(arr[j].y, arr[j].z));
            insert(zst, zmx, pii(arr[j].z, arr[j].y));
            /*cout << "insert (" << arr[j].y << ", " << arr[j].z << "),\n";
            cout << "ymx = (" << ymx.X << ", " << ymx.Y << ")\n";
            cout << "zmx = (" << zmx.Y << ", " << zmx.X << ")\n";*/
            --j;
        }
        if (ymx.X > arr[i].y && ymx.Y > arr[i].z)
            ans = max(ans, arr[i].x + ymx.X + ymx.Y);
        if (zmx.X > arr[i].z && zmx.Y > arr[i].y)
            ans = max(ans, arr[i].x + zmx.X + zmx.Y);
    }
    cout << ans << "\n";
}
#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...