Submission #361450

#TimeUsernameProblemLanguageResultExecution timeMemory
361450RyoPhamPinball (JOI14_pinball)C++14
100 / 100
374 ms26984 KiB
#define taskname "test" #include <bits/stdc++.h> using namespace std; #define sz(x) (int)x.size() #define fi first #define se second typedef long long lli; typedef pair<int, int> pii; const int maxn = 3e5 + 5; const lli inf = 1e18; int n, m; int a[maxn], b[maxn], c[maxn], d[maxn]; vector<int> vals; struct segment_tree { lli min_val[maxn * 4]; segment_tree() { fill(begin(min_val), end(min_val), inf); } void update(int x, int l, int r, int p, lli k) { if(l == r) { min_val[x] = min(min_val[x], k); return; } int mid = (l + r) / 2; if(p <= mid) update(x * 2, l, mid, p, k); else update(x * 2 + 1, mid + 1, r, p, k); min_val[x] = min(min_val[x * 2], min_val[x * 2 + 1]); } lli get(int x, int l, int r, int L, int R) { if(L > r || l > R) return inf; if(l >= L && r <= R) return min_val[x]; int mid = (l + r) / 2; return min(get(x * 2, l, mid, L, R), get(x * 2 + 1, mid + 1, r, L, R)); } }; segment_tree tree_f, tree_g; void read_input() { cin >> n >> m; for(int i = 1; i <= n; ++i) cin >> a[i] >> b[i] >> c[i] >> d[i]; } int lwb(const vector<int>&arr, int k) { return lower_bound(arr.begin(), arr.end(), k) - arr.begin() + 1; } void init() { vals.push_back(1); vals.push_back(m); for(int i = 1; i <= n; ++i) { vals.push_back(a[i]); vals.push_back(b[i]); vals.push_back(c[i]); } sort(vals.begin(), vals.end()); vals.erase(unique(vals.begin(), vals.end()), vals.end()); m = sz(vals); for(int i = 1; i <= n; ++i) { a[i] = lwb(vals, a[i]); b[i] = lwb(vals, b[i]); c[i] = lwb(vals, c[i]); } } void solve() { tree_f.update(1, 1, m, 1, 0); tree_g.update(1, 1, m, m, 0); lli ans = inf; for(int i = 1; i <= n; ++i) { ans = min(ans, tree_f.get(1, 1, m, a[i], b[i]) + tree_g.get(1, 1, m, a[i], b[i]) + d[i]); lli k = tree_f.get(1, 1, m, a[i], b[i]) + d[i]; tree_f.update(1, 1, m, c[i], k); k = tree_g.get(1, 1, m, a[i], b[i]) + d[i]; tree_g.update(1, 1, m, c[i], k); } if(ans == inf) ans = -1; cout << ans << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); read_input(); init(); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...