Submission #1187699

#TimeUsernameProblemLanguageResultExecution timeMemory
1187699petezaFeast (NOI19_feast)C++20
100 / 100
62 ms7388 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int n, k;
ll qs[300005];
pair<ll, int> dp[300005];
ll l = -1e17, r = 0, mid;

pair<ll, int> calcdp(ll reward) {
    pair<ll, int> cmx, cmxdp;
    for(int i=1;i<=n;i++) {
        dp[i] = {cmx.first + qs[i] + reward, cmx.second+1};
        cmxdp = max(cmxdp, dp[i]);
        cmx = max(cmx, pair<ll, int>(cmxdp.first - qs[i], cmxdp.second));
    }
    return cmxdp;
}

ll fl(ll a, ll b) {
    return a/b - ((a^b) < 0 && a%b);
}

int main() {
    cin.tie(0) -> sync_with_stdio(0);
    cin >> n >> k;
    for(int i=1;i<=n;i++) {
        cin >> qs[i];
        qs[i] += qs[i-1];
    }
    while(l < r) {
        mid = fl(l+r, 2);
        if(calcdp(mid).second < k) l = mid+1;
        else r = mid;
    }
    cout << calcdp(r).first-(r*k);
}
#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...