This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf = 1LL<<50;
ll n, k;
vector<ll> PS, DP, C;
ll sol(ll g) {
ll b = PS[n], c = 0;
for(int i = 1; i <= n; i++) {
if(DP[i-1] >= b-(PS[n]-PS[i])-g)
DP[i] = DP[i-1],
C[i] = C[i-1];
else
DP[i] = b-(PS[n]-PS[i])-g,
C[i] = c+1;
if(b < DP[i]+PS[n]-PS[i])
b = DP[i]+PS[n]-PS[i], c = C[i];
}
return C[n];
}
int main() {
cin >> n >> k;
PS.resize(n+1, 0);
DP.resize(n+1, 0);
C.resize(n+1, 0);
for(int i = 1; i <= n; i++)
cin >> PS[i], PS[i] += PS[i-1];
ll l = 0, u = inf;
while(l < u) {
ll g = (l+u)/2;
ll c = sol(g);
if(c == k) l = u = g;
if(c > k) l = g;
if(c < k) u = g;
}
sol(l);
cout << DP[n]+k*l;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |