Submission #885074

#TimeUsernameProblemLanguageResultExecution timeMemory
885074vjudge1K blocks (IZhO14_blocks)C++17
100 / 100
173 ms84876 KiB
#include <bits/stdc++.h>
using namespace std;
long long dp[105][100005], a[100005];
int main()
{
    long long n, k;
    cin >> n >> k;
    long long mx = 0;
    memset(dp, 1000000007, sizeof(dp));
    for (long long i = 1; i <= n; i++) 
    {
        cin >> a[i];
        mx = max(mx, a[i]);
        dp[1][i] = mx;
    }
    for (long long i = 2; i <= k; i++) 
    {
        stack<long long> s1, s2;
        for (long long j = 1; j <= n; j++) 
        {
            long long tmp = dp[i-1][j-1];
            while (s1.size() && s1.top() < a[j]) 
            {
                tmp = min(tmp, s2.top());
                s1.pop();
                s2.pop();
            }
            if (s1.empty() || tmp+a[j] < s1.top()+s2.top())
            {
                s1.push(a[j]);
                s2.push(tmp);
            }
            if (j >= i) dp[i][j] = s1.top()+s2.top();
        }
    }
    cout << dp[k][n] << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...