Submission #1315972

#TimeUsernameProblemLanguageResultExecution timeMemory
1315972eldorbek_008Pinball (JOI14_pinball)C++20
100 / 100
413 ms62264 KiB
#include <bits/stdc++.h> using namespace std; #define int int64_t const int N = 3e5 + 1; const int inf = 1e18; struct segtree { vector<int> t; segtree() { t.assign(4 * N, inf); }; void update(int v, int l, int r, int i, int x) { if (l > i or r < i or l > r) { return; } else if (l == r) { t[v] = min(t[v], x); } else { int m = (l + r) >> 1; if (i <= m) { update(2 * v, l, m, i, x); } else { update(2 * v + 1, m + 1, r, i, x); } t[v] = min(t[2 * v], t[2 * v + 1]); } } int get(int v, int l, int r, int L, int R) { if (l > r or L > r or R < l) { return inf; } else if (L <= l and r <= R) { return t[v]; } else { int m = (l + r) >> 1; int lt = get(2 * v, l, m, L, R); int rt = get(2 * v + 1, m + 1, r, L, R); return min(lt, rt); } } }; segtree sl, sr; int32_t main() { ios :: sync_with_stdio(false); cin.tie(nullptr); int m, n; cin >> m >> n; vector<int> l(m + 1), r(m + 1), c(m + 1), w(m + 1), mn(m + 1), mx(m + 1); vector<vector<int>> dp(m + 1, vector<int>(2)); for (int i = 0; i < m; i++) { cin >> l[i] >> r[i] >> c[i] >> w[i]; } int ans = 1e18; map<int, int> mp; set<int> st; st.insert(1); st.insert(n); for (int i = 0; i < m; i++) { st.insert(l[i]); st.insert(r[i]); st.insert(c[i]); } int i = 0; for (int j : st) { mp[j] = i + 1; i++; } int sz = i; sl.update(1, 1, sz, mp[1], 0); sr.update(1, 1, sz, mp[n], 0); for (int i = 0; i < m; i++) { int lx = mp[l[i]]; int rx = mp[r[i]]; int k = mp[c[i]]; int val = w[i]; int cl = sl.get(1, 1, sz, lx, rx); int cr = sr.get(1, 1, sz, lx, rx); if (cl < inf and cr < inf) { ans = min(ans, cl + cr + val); } if (cl < inf) { sl.update(1, 1, sz, k, cl + val); } if (cr < inf) { sr.update(1, 1, sz, k, cr + val); } } if (ans == 1e18) { cout << -1; } else { cout << ans; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...