Submission #855128

#TimeUsernameProblemLanguageResultExecution timeMemory
855128AlfraganusMoney (IZhO17_money)C++17
100 / 100
570 ms19536 KiB
#include <bits/stdc++.h>
using namespace std;

#define fs first
#define ss second
#define endl '\n'
#define all(a) a.begin(), a.end()

#define print(a)          \
    for (auto x : a)      \
        cout << x << ' '; \
    cout << endl;

#define printmp(a)   \
    for (auto x : a) \
        cout << x.fs << ' ' << x.ss << endl;

struct SegTree {
    int size = 1;
    vector<int> sums;

    SegTree (){
        while(1e6 > size)
            size <<= 1;
        sums.resize(size << 1);
    }

    void add(int i, int x, int lx, int rx){
        if(rx == lx + 1){
            sums[x] ++;
            return;
        }
        int m = (lx + rx) >> 1;
        if(i < m)
            add(i, (x << 1) + 1, lx, m);
        else
            add(i, (x << 1) + 2, m, rx);
        sums[x] = sums[(x << 1) + 1] + sums[(x << 1) + 2];
    }

    void add(int i){
        add(i, 0, 0, size);
    }

    int sum(int l, int r, int x, int lx, int rx){
        if(l <= lx and rx <= r)
            return sums[x];
        if(r <= lx or rx <= l)
            return 0;
        int m = (lx + rx) >> 1;
        return sum(l, r, (x << 1) + 1, lx, m) + sum(l, r, (x << 1) + 2, m, rx);
    }

    int sum(int l, int r){
        return sum(l, r, 0, 0, size);
    }
};

void solve()
{
    int n;
    cin >> n;
    vector<int> a(n);
    for(int i = 0; i < n; i ++)
        cin >> a[i];
    SegTree s;
    int ans = 0;
    int l = 0, r = 0;
    while(l < n and r < n){
        while(r < n and a[max(l, r - 1)] <= a[r] and s.sum(a[l] + 1, a[r]) == 0)
            r ++;
        for(int i = l; i < r; i ++)
            s.add(a[i]);
        ans ++;
        l = r;
    }
    cout << ans;
}

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;
    // cin >> t;
    while (t--)
    {
        solve();
        cout << 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...