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;
#define fi first
#define se second
const int MAXN=1+1e5;
const int inf=1+1e9;
LL n,k,f[110][MAXN],a[MAXN];
deque<pair<LL,LL> > q;
int main()
{
#define TASK "ABC"
//freopen(TASK ".inp","r",stdin);
//freopen(TASK ".out","w",stdout);
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>n>>k;
for(int i=1; i<=n; ++i)
{
cin>>a[i];
}
for(int i=1; i<=k; ++i)
{
for(int j=0; j<=n; ++j)
{
f[i][j]=inf;
}
}
f[1][0]=0;
for(int i=1; i<=n; ++i) f[1][i]=max(f[1][i-1],a[i]);
for(int i=2; i<=k; ++i)
{
q.clear();
for(int j=i; j<=n; ++j)
{
LL minf=f[i-1][j-1];
while(!q.empty()&&a[j]>=a[q.back().se])
{
minf=min(minf,q.back().fi);
q.pop_back();
}
if(q.empty()) f[i][j]=min(f[i][0],minf+a[j]);
else f[i][j]=min(f[i][q.back().se],minf+a[j]);
//f[i][j]=min(f[i][j],minf+a[j]);
q.push_back({minf,j});
//cout<<i<<' '<<j<<' '<<minf<<' '<<f[i][j]<<endl;
}
}
cout<<f[k][n];
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... |