Submission #1290465

#TimeUsernameProblemLanguageResultExecution timeMemory
1290465MinhKienFeast (NOI19_feast)C++20
22 / 100
52 ms7432 KiB
#include <iostream> using namespace std; #define ll long long const int N = 3e5 + 10; int n, k, MinPre, it[N], f[N]; ll a[N], dp[N]; void dodp(ll delta) { dp[1] = a[1] - delta; f[1] = 1; for (int i = 2; i <= n; ++i) { if (dp[it[i]] > 0) { dp[i] = dp[it[i]] + a[i] - a[it[i]] - delta; f[i] = f[it[i]] + 1; } else { dp[i] = a[i] - a[it[i]] - delta; f[i] = 1; } if (dp[i - 1] > dp[i]) { dp[i] = dp[i - 1]; f[i] = f[i - 1]; } } } int main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false); cin >> n >> k; for (int i = 1; i <= n; ++i) { cin >> a[i]; it[i] = MinPre; a[i] += a[i - 1]; if (a[i] < a[MinPre]) MinPre = i; } ll l = 0, r = 1e12, ans = l; while (l <= r) { ll mid = (l + r) >> 1; dodp(mid); if (f[n] <= k) { r = mid - 1; ans = mid; } else { l = mid + 1; } } dodp(ans); cout << max(0ll, dp[n] + (ll)f[n] * ans) << "\n"; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...