Submission #491768

#TimeUsernameProblemLanguageResultExecution timeMemory
491768VodkaInTheJarMoney (IZhO17_money)C++14
45 / 100
1588 ms5336 KiB
#include <bits/stdc++.h>
#define endl '\n'

using namespace std;

const int maxn = 1e6 + 3;

int n;
int a[maxn];
void read()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
}

int dp[maxn];
void solve()
{
    dp[n+1] = 0;
    for (int i = n; i >= 1; i--)
    {
        set <int> s;
        for (int j = 1; j < i; j++)
            s.insert(a[j]);

        dp[i] = dp[i+1] + 1;
         auto it = s.upper_bound(a[i]);
        for (int j = i+1; j <= n; j++)
        {
            if (a[j] < a[j-1])
                break;

            if (it != s.end() && a[j] > *it)
                break;

            dp[i] = min(dp[i], dp[j+1] + 1);
        }
    }

    cout << dp[1] << endl;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    read();
    solve();
}


/*
6
3 6 4 5 1 2
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...