Submission #1257187

#TimeUsernameProblemLanguageResultExecution timeMemory
1257187coin_Pinball (JOI14_pinball)C++20
11 / 100
8 ms19268 KiB
#include <bits/stdc++.h> #define endl '\n' #define int long long #define fi first #define se second #define pb push_back using namespace std; const int maxn = 3e5 + 5, inf = 1e15 + 1; struct segment{ int st[4*maxn+5]; segment(){ fill_n(st, 4 * maxn + 5, inf); } void update(int id, int l, int r, int k, int val){ if (l > r) return; if (l == r){ st[id] = min(st[id], val); return; } int mid = (l + r) / 2; // Avoid potential overflow if (k <= mid) { update(id*2, l, mid, k, val); } else { update(id*2+1, mid+1, r, k, val); } st[id] = min(st[id*2], st[id*2+1]); } int get(int id, int l, int r, int ul, int ur){ if (l > ur || r < ul) return inf; if (ul <= l && r <= ur) return st[id]; int mid = (l + r) / 2; return min(get(id*2, l, mid, ul, ur), get(id*2+1, mid+1, r, ul, ur)); } }; segment l, r; signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, q; cin >> q >> n; int ans = inf; map<int, int> coordsToIdx; int cnt = 0; vector<vector<int>> input(q+1, vector<int>(4, 0)); set<int> s; s.insert(1); s.insert(n); for (int i = 0; i < q; i++){ cin >> input[i][0] >> input[i][1] >> input[i][2] >> input[i][3]; for (int j = 0; j < 3; j++) s.insert(input[i][j]); } for (int num: s){ coordsToIdx[num] = ++cnt; } n = cnt; l.update(1, 1, n, 1, 0); r.update(1, 1, n, n, 0); for (int i = 0; i < q; i++){ int ul = coordsToIdx[input[i][0]], ur = coordsToIdx[input[i][1]], k = coordsToIdx[input[i][2]], val = input[i][3]; ans = min(ans, l.get(1, 1, n, ul, k) + r.get(1, 1, n, k, ur) + val); int newL = min(l.get(1, 1, n, ul, k) + val, l.get(1, 1, n, k, k)); l.update(1, 1, n, k, newL); int newR = min(r.get(1, 1, n, k, ur) + val, r.get(1, 1, n, k, k)); r.update(1, 1, n, k, newR); } cout << (ans >= inf ? -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...