Submission #1142725

#TimeUsernameProblemLanguageResultExecution timeMemory
1142725kitlixMoney (IZhO17_money)C++20
100 / 100
1186 ms63060 KiB
#include <bits/stdc++.h>
#define int long long

using namespace std;

const int INF = 1e9;

signed main() {
    ios_base::sync_with_stdio(0), cin.tie(0);
    int n;
    cin >> n;
    vector<int> a(n);
    for (auto& el : a)
        cin >> el;
    int curnondec = 0;
    vector<int> dp(n, INF);
    multiset<int> se;
    for (int i = 0; i < n; ++i) {
        if (i == 0 || a[i] < a[i - 1])
            curnondec = 1;
        else
            curnondec += 1;
        se.insert(a[i]);
        for (int j = i - 1; j >= i - curnondec; --j) {
            se.extract(a[j + 1]);
            int mx = a[i], mn = a[j + 1];
            auto it = se.lower_bound(mx);
            if (it == se.begin() || *prev(it) <= mn) {
                dp[i] = min(dp[i], (j == -1 ? 1ll : dp[j] + 1));
            }
        }
        for (int j = i - curnondec + 1; j <= i; ++j)
            se.insert(a[j]);
    }
    cout << dp.back();
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...