Submission #238075

#TimeUsernameProblemLanguageResultExecution timeMemory
238075luciocfK blocks (IZhO14_blocks)C++14
100 / 100
250 ms45288 KiB
#include <bits/stdc++.h>
 
#define ff first
#define ss second
 
using namespace std;
 
typedef pair<int, int> pii;
 
const int maxn = 1e5+10;
const int maxk = 110;
const int inf = 1e9+10;
 
int n, k;
int a[maxn];
 
int mn[maxn];
 
int dp[maxn][maxk];
 
int main(void)
{
	scanf("%d %d", &n, &k);
 
	for (int i = 1; i <= n; i++)
		scanf("%d", &a[i]);
 
	dp[0][1] = inf, dp[1][1] = a[1];
	for (int i = 2; i <= n; i++)
		dp[i][1] = max(a[i], dp[i-1][1]);
 
	for (int j = 2; j <= k; j++)
	{
		stack<pii> stk;
 
		for (int i = 0; i < j; i++)
			dp[i][j] = inf;
 
		for (int i = j; i <= n; i++)
		{
			mn[i] = dp[i-1][j-1];
			dp[i][j] = inf;
 
			while (stk.size() && stk.top().ff <= a[i])
			{
				mn[i] = min(mn[i], mn[stk.top().ss]);
				stk.pop();
			}
 
			if (!stk.empty())
				dp[i][j] = dp[stk.top().ss][j];

			dp[i][j] = min(dp[i][j], a[i]+mn[i]); 

			stk.push({a[i], i});
		}
	}
 
	printf("%d\n", dp[n][k]);
}

Compilation message (stderr)

blocks.cpp: In function 'int main()':
blocks.cpp:23:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &k);
  ~~~~~^~~~~~~~~~~~~~~~~
blocks.cpp:26:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &a[i]);
   ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...