Submission #1196991

#TimeUsernameProblemLanguageResultExecution timeMemory
1196991og_matveychick1Pinball (JOI14_pinball)C++20
100 / 100
180 ms25612 KiB
#include "bits/stdc++.h"

using namespace std;

typedef long long ll;

struct ST {
    vector<ll> t;
    ll n;

    ST(ll n) : n(n), t(4 * n, 1e18) {}

    void update(ll p, ll x) {
        update(1, 0, n, p, x);
    }

    void update(ll v, ll l, ll r, ll p, ll x) {
        if (l > p || r <= p) return;
        if (l + 1 == r) {
            t[v] = min(t[v], x);
            return;
        }
        ll m = (l + r) / 2;
        update(v * 2, l, m, p, x);
        update(v * 2 + 1, m, r, p, x);
        t[v] = min(t[v * 2], t[v * 2 + 1]);
    }

    ll get(ll l, ll r) {
        return get(1, 0, n, l, r);
    }

    ll get(ll v, ll l, ll r, ll L, ll R) {
        if (l >= R || r <= L) return 1e18;
        if (l >= L && r <= R) return t[v];
        ll m = (l + r) / 2;
        return min(get(v * 2, l, m, L, R), get(v * 2 + 1, m, r, L, R));
    }
};

const ll N = 1e6;

ll m, n, a[N], c[N], b[N], d[N], p[N];
vector<ll> s;


signed main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> m >> n;
    s = {1, n};
    for (ll i = 0; i < m; i++)
        cin >> a[i] >> b[i] >> c[i] >> d[i], s.push_back(a[i]), s.push_back(b[i]), s.push_back(c[i]);
    sort(s.begin(), s.end());
    s.resize(unique(s.begin(), s.end()) - s.begin());
    n = s.size();
    for (ll i = 0; i < m; i++)
        a[i] = lower_bound(s.begin(), s.end(), a[i]) - s.begin(),
        b[i] = lower_bound(s.begin(), s.end(), b[i]) - s.begin(),
        c[i] = lower_bound(s.begin(), s.end(), c[i]) - s.begin();

    iota(p, p + m, 0);
    ST tl(n);
    tl.update(0, 0);
    ST tr(n);
    tr.update(n - 1, 0);
    ll ans = 1e18;
    for (ll i = 0; i < m; i++) {
        ans = min(ans, tl.get(a[p[i]], n) + tr.get(0, b[p[i]] + 1) + d[p[i]]);
        tl.update(c[p[i]], tl.get(a[p[i]], n) + d[p[i]]);
        tr.update(c[p[i]], tr.get(0, b[p[i]] + 1) + d[p[i]]);
    }
    cout << (ans == 1e18 ? -1 : ans);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...