Submission #886948

#TimeUsernameProblemLanguageResultExecution timeMemory
886948alexddK개의 묶음 (IZhO14_blocks)C++17
100 / 100
144 ms126984 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...