Submission #1142209

#TimeUsernameProblemLanguageResultExecution timeMemory
1142209NurislamK blocks (IZhO14_blocks)C++17
0 / 100
0 ms328 KiB

#include <bits/stdc++.h>


using namespace std;

#define int long long

signed main(){
	int n, k;
	cin >> n >> k;
	int inf = 1e15;
	vector<vector<int>> dp( n + 1, vector<int> (k+1, 0));
	vector<int> a(n+1);
	for(int i = 1; i <= n; i++){
		cin >> a[i];
		dp[i][1] = max(dp[i-1][1], a[i]);
	}
	
	for(int j = 2; j <= k; j ++ ){
		vector<array<int,2>> v;
		for(int i = j; i <= n; i++){
			int mn = dp[i-1][j-1];
			dp[i][j] = inf;
			
			while(v.size() && v.back()[0] <= a[i]) {
				mn = min(mn, v.back()[1]);
				v.pop_back();
			};
			dp[i][j] = mn + a[i];
			if(v.size())dp[i][j] = min(dp[i][j], v.back()[0] + v.back()[1]);
			v.push_back({a[i], mn});
		}
		
	}
	//for(int j = 1; j <= k; j ++ ) {
		//for(int i = 1; i <= n; i++)cout << dp[i][j] << ' ';
		//cout << '\n';
	//}
	
	cout << dp[n][k] << '\n';
	
	
};
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...