Submission #1141153

#TimeUsernameProblemLanguageResultExecution timeMemory
1141153anmattroiCake 3 (JOI19_cake3)C++17
0 / 100
1 ms328 KiB
/******************************************* Task: JOI19_Cake3 Link: https://oj.uz/problem/view/JOI19_cake3 *******************************************/ #include <bits/stdc++.h> #define maxn 200005 #define fi first #define se second using namespace std; using ii = pair<int, int>; using li = pair<int64_t, int>; int n, k; ii a[maxn]; li f[maxn]; li solve_lambda(int64_t lambda) { li mx = {LLONG_MIN/100, 0}; for (int i = 1; i <= n; i++) { f[i] = {a[i].fi + 2LL * a[i].se - lambda, 1}; f[i] = max(f[i], li{mx.fi+a[i].fi - lambda, mx.se+1}); mx = max(mx, f[i]); } mx = {LLONG_MIN, 0}; for (int i = 1; i <= n; i++) mx = max(mx, li{f[i].fi - 2LL * a[i].se, f[i].se}); return mx; } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cin >> n >> k; for (int i = 1; i <= n; i++) cin >> a[i].fi >> a[i].se; sort(a + 1, a + n + 1, [&](ii x, ii y) {return x.se < y.se;}); li mx = {-1, 0}; for (int i = 1; i <= n; i++) { f[i] = {a[i].fi + 2LL * a[i].se, 1}; f[i] = max(f[i], li{mx.fi+a[i].fi, mx.se+1}); mx = max(mx, f[i]); } mx = {LLONG_MIN, 0}; for (int i = 1; i <= n; i++) mx = max(mx, li{f[i].fi - 2LL * a[i].se, f[i].se}); if (mx.se >= k) { int64_t lo = 0, hi = LLONG_MAX/10; while (hi - lo > 1) { int64_t mid = (lo + hi) >> 1LL; if (solve_lambda(mid).se >= k) lo = mid; else hi = mid; } cout << solve_lambda(lo).fi + k * lo; exit(0); } else { int64_t lo = -5000000000LL, hi = 1; while (hi - lo > 1) { int64_t mid = (lo + hi) >> 1LL; if (solve_lambda(mid).se >= k) lo = mid; else hi = mid; } cout << solve_lambda(lo).fi + max(solve_lambda(lo).se, k) * lo << "\n"; exit(0); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...