제출 #1338881

#제출 시각아이디문제언어결과실행 시간메모리
1338881DangKhoizzzzMoney (IZhO17_money)C++20
100 / 100
97 ms16088 KiB

#include <bits/stdc++.h>

#define arr4 array <int , 4>
#define pii pair <int , int>
#define fi first
#define se second
#define BIT(x , k) ((x >> k)&1)
#define MASK(x) (1 << x)
#define int long long
#define ull unsigned long long

using namespace std;

const int maxn = 1e6 + 10;
const int INF = 1e18;

int n , bit[maxn] , a[maxn];

void update(int pos , int val)
{
    while(pos < maxn)
    {
        bit[pos] += val;
        pos += (pos & (-pos));
    }
}
int get(int pos)
{
    int res = 0;
    while(pos > 0)
    {
        res += bit[pos];
        pos -= (pos & (-pos));
    }
    return res;
}
int get_range(int l , int r)
{
    if(r < l) return 0;
    return get(r) - get(l-1);
}

void solve()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];
    int ans = 0;
    for(int i = 1; i <= n;)
    {
        int j = i;
        int l = -INF;
        int cnt = 0;
        while(j <= n && a[j] >= l && get_range(a[i]+1 , a[j]-1) == 0)
        {
            l = a[j];
            j++;
        }
        for(int k = i; k < j; k++) update(a[k] , 1);
        ans++;
        i = j;
    }
    cout << ans << '\n';
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...