제출 #102686

#제출 시각아이디문제언어결과실행 시간메모리
102686stefdascaK개의 묶음 (IZhO14_blocks)C++14
100 / 100
279 ms2760 KiB
#include<bits/stdc++.h> using namespace std; int n, k, dp[3][100002], v[100002]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> k; for(int i = 1; i <= n; ++i) cin >> v[i]; int mx = 0; for(int i = 1; i <= n; ++i) { mx = max(mx, v[i]); dp[1][i] = mx; } for(int i = 2; i <= k; ++i) { deque<int>val; deque<int>pmax; deque<int>pmin; for(int j = i; j <= n; ++j) { int zmin = j-1; while(!val.empty() && v[j] >= v[val.back()]) { if(dp[1][pmin.back()] < dp[1][zmin]) zmin = pmin.back(); pmin.pop_back(); val.pop_back(); pmax.pop_back(); } val.push_back(j); pmin.push_back(zmin); if(val.size() == 1) pmax.push_back(dp[1][zmin] + v[j]); else { if(pmax.back() < dp[1][zmin] + v[j]) pmax.push_back(pmax.back()); else pmax.push_back(dp[1][zmin] + v[j]); } dp[2][j] = pmax.back(); } for(int j = 1; j <= n; ++j) dp[1][j] = dp[2][j], dp[2][j] = 0; } cout << dp[1][n] << '\n'; 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...