제출 #1168054

#제출 시각아이디문제언어결과실행 시간메모리
1168054altern23Money (IZhO17_money)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define ll long long
#define pii pair<ll, ll>
#define fi first
#define sec second
#define ld long double

const ll N = 1e5;
const ll INF = 4e18;
const ll MOD = 998244353;

struct ST{
    ll n;
    vector<ll> sg;
    ST(ll _n){
        n = _n;
        sg = vector<ll> (4 * n + 5, INF);
    }

    void upd(ll l, ll r, ll cur, ll idx, ll val){
        if(l == r) sg[cur] = min(sg[cur], val);
        else{
            ll mid = (l + r) / 2;
            if(idx <= mid) upd(l, mid, cur * 2, idx, val);
            else upd(mid + 1, r, cur * 2 + 1, idx, val);
            sg[cur] = min(sg[cur * 2], sg[cur * 2 + 1]);
        }
    }

    ll query(ll l, ll r, ll cur, ll x, ll y){
        if(l > y || r < x) return INF;
        if(l >= x && r <= y) return sg[cur];
        ll mid = (l + r) / 2;
        return min(query(l, mid, cur * 2, x, y), query(mid + 1, r, cur * 2 + 1, x, y));
    }
};

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int tc = 1;
    // cin >> tc;
    for(;tc--;){
        ll n; cin >> n;
        vector<ll> a(n + 5);
        for(int i = 1; i <= n; i++) cin >> a[i];
        
        vector<pii> segs;
        ll lst = 1;
        for(int i = 1; i <= n; i++){
            if(a[i] < a[i - 1]){
                segs.push_back({lst, i - 1});
                lst = i;
            }
        }
        segs.push_back({lst, n});

        ST sg(n);
        for(auto [i, j] : segs){
            ll lst = a[i];
            for(int k = i + 1; k <= j; k++){
                if(sg.query(1, n, 1, a[k - 1], a[k]) < lst){
                    sg.upd(1, n, 1, a[k - 1], lst);
                    lst = a[k];
                }
            } 
            sg.upd(1, n, 1, a[j], lst);
        }

        ll ans = 0;
        for(int i = 1; i <= n; i++){
            ans += (sg.query(1, n, 1, i, i) != INF);
        }

        cout << ans << "\n";
    }   
}

/*

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