Submission #174338

#TimeUsernameProblemLanguageResultExecution timeMemory
174338emil_physmathMoney (IZhO17_money)C++17
45 / 100
1597 ms65920 KiB
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
#include <set>
using namespace std;
typedef unsigned int uint;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int n;
    cin >> n;
    vector<int> a(n), upto(n); // sorted upto
    for (int i = 0; i < n; ++i)
        cin >> a[i];
    upto[n - 1] = n - 1;
    for (int i = n - 2; i >= 0; --i)
        upto[i] = (a[i] <= a[i + 1] ? upto[i + 1] : i);

    set<int> x;
    vector<int> dp(n, n);
    for (int i = 0; i < n; ++i)
    {
        auto it  = x.upper_bound(a[i]);
        int r;
        if (it == x.end())
            r = upto[i];
        else
            r = prev(upper_bound(a.begin() + i, a.begin() + upto[i] + 1, *it)) - a.begin();
        dp[r] = min(dp[r], (i ? dp[i - 1] : 0) + 1);
        x.insert(a[i]);
    }
    cout << dp[n - 1];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...