Submission #1316517

#TimeUsernameProblemLanguageResultExecution timeMemory
1316517Lakshya108Feast (NOI19_feast)C++20
100 / 100
105 ms5076 KiB
#include <bits/stdc++.h> using namespace std; pair<long long,int> calc(const vector<long long>& a, long long p) { int n = a.size(); vector<long long> pref(n+1); for (int i = 0; i < n; i++) pref[i+1] = pref[i] + a[i]; long long dp = 0, best = 0; int cnt = 0, bestc = 0; for (int i = 1; i <= n; i++) { long long v1 = dp; int c1 = cnt; long long v2 = best + pref[i] - p; int c2 = bestc + 1; if (v2 > v1 || (v2 == v1 && c2 > c1)) { dp = v2; cnt = c2; } long long cur = dp - pref[i]; if (cur > best || (cur == best && cnt > bestc)) { best = cur; bestc = cnt; } } return {dp, cnt}; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; vector<long long> a(n); for (auto &x : a) cin >> x; auto base = calc(a, 0); if (base.second <= k) { cout << base.first; return 0; } long long l = 1, r = 1e14; while (l <= r) { long long m = (l + r) >> 1; if (calc(a, m).second > k) l = m + 1; else r = m - 1; } auto res = calc(a, l); cout << res.first + l * res.second; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...