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;
#define int long long
const int INF = 1e18;
int n,k;
int a[100005];
deque<pair<int,int>> dq[100005];
int dp[100005];
signed main()
{
cin>>n>>k;
for(int i=0;i<=k;i++)
dp[i]=-INF;
int minpref=INF;
for(int i=1;i<=n;i++)
{
cin>>a[i];
a[i] = 1000000000 - a[i];
minpref = min(minpref, a[i]);
for(int j=k;j>1;j--)
{
int mxm=-INF;
while(!dq[j].empty() && a[i]<=dq[j].back().second)
{
mxm = max(mxm, dq[j].back().first - dq[j].back().second);
dq[j].pop_back();
}
mxm = max(mxm, dp[j-1]);
if(mxm!=-INF && (dq[j].empty() || mxm+a[i] > dq[j].back().first)) dq[j].push_back({mxm+a[i],a[i]});
if(!dq[j].empty()) dp[j] = dq[j].back().first;
else dp[j]=-INF;
}
dp[1] = minpref;
}
cout<<1000000000 * k - dp[k];
return 0;
}
# | 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... |