Submission #1142218

#TimeUsernameProblemLanguageResultExecution timeMemory
1142218NurislamK 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 = 1e12;
	vector<vector<int>> dp( n + 1, vector<int> (k+1, inf));
	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]);
		if(i == 1)dp[i][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];
			
			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});
		}
	}
	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...