/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 4ms 3.52 MiB
#2 Accepted 4ms 3.52 MiB
#3 Accepted 4ms 3.52 MiB
#4 Accepted 4ms 3.52 MiB
#5 Accepted 5ms 3.516 MiB
#6 Accepted 7ms 3.52 MiB
#7 Accepted 6ms 3.52 MiB
#8 Accepted 12ms 3.52 MiB
#9 Accepted 12ms 3.52 MiB
#10 Accepted 12ms 3.52 MiB
#11 Accepted 12ms 3.562 MiB
#12 Accepted 12ms 3.586 MiB
#13 Accepted 12ms 3.551 MiB
#14 Accepted 12ms 3.52 MiB
#15 Accepted 12ms 3.371 MiB
#16 Accepted 12ms 3.562 MiB
#17 Accepted 12ms 3.398 MiB
#18 Accepted 12ms 3.52 MiB
#19 Accepted 8ms 3.52 MiB
#20 Accepted 8ms 3.52 MiB
#21 Accepted 8ms 3.52 MiB
#22 Accepted 8ms 3.422 MiB
#23 Accepted 8ms 3.59 MiB
#24 Accepted 8ms 3.52 MiB
#25 Accepted 10ms 3.52 MiB
#26 Accepted 11ms 3.566 MiB
#27 Accepted 11ms 3.52 MiB
#28 Accepted 12ms 3.52 MiB
#29 Accepted 12ms 3.52 MiB
#30 Accepted 12ms 3.562 MiB
#31 Accepted 12ms 3.582 MiB
#32 Accepted 12ms 3.527 MiB
#33 Accepted 12ms 3.52 MiB
#34 Accepted 12ms 3.473 MiB
#35 Accepted 12ms 3.578 MiB
#36 Accepted 12ms 3.566 MiB
#37 Accepted 12ms 3.566 MiB
#38 Accepted 12ms 3.746 MiB
#39 Accepted 12ms 3.52 MiB
#40 Accepted 12ms 3.594 MiB
#41 Accepted 9ms 3.52 MiB
#42 Accepted 8ms 3.52 MiB
#43 Accepted 12ms 3.492 MiB
#44 Accepted 13ms 3.477 MiB
#45 Accepted 13ms 3.52 MiB
#46 Accepted 13ms 3.398 MiB
#47 Accepted 12ms 3.52 MiB
#48 Accepted 12ms 3.617 MiB
#49 Accepted 12ms 3.52 MiB
#50 Accepted 12ms 3.562 MiB
#51 Accepted 13ms 3.52 MiB
#52 Accepted 12ms 3.52 MiB
#53 Accepted 12ms 3.566 MiB
#54 Accepted 13ms 3.562 MiB
#55 Accepted 13ms 3.52 MiB
#56 Accepted 12ms 3.387 MiB
#57 Accepted 12ms 3.52 MiB
#58 Accepted 12ms 3.52 MiB
#59 Accepted 12ms 3.52 MiB
#60 Accepted 12ms 3.52 MiB
#61 Accepted 20ms 3.52 MiB
#62 Accepted 14ms 3.52 MiB
#63 Accepted 15ms 3.559 MiB
#64 Accepted 18ms 3.52 MiB
#65 Accepted 18ms 3.609 MiB
#66 Accepted 16ms 3.789 MiB
#67 Accepted 15ms 3.457 MiB
#68 Accepted 16ms 3.566 MiB
#69 Accepted 15ms 3.5 MiB
#70 Accepted 8ms 3.52 MiB
#71 Accepted 14ms 3.52 MiB
#72 Accepted 9ms 3.52 MiB
#73 Accepted 9ms 3.52 MiB
#74 Accepted 18ms 3.551 MiB
#75 Accepted 18ms 3.52 MiB
#76 Accepted 8ms 3.648 MiB
#77 Accepted 8ms 3.562 MiB
#78 Accepted 8ms 3.52 MiB
#79 Accepted 10ms 3.52 MiB
#80 Accepted 10ms 3.52 MiB
#81 Accepted 17ms 3.52 MiB
#82 Accepted 10ms 3.656 MiB
#83 Accepted 11ms 3.52 MiB
#84 Accepted 14ms 3.508 MiB
#85 Accepted 14ms 3.52 MiB
#86 Accepted 11ms 3.539 MiB
#87 Accepted 11ms 3.52 MiB
#88 Accepted 12ms 3.656 MiB
#89 Accepted 11ms 3.531 MiB
#90 Accepted 11ms 3.52 MiB
#91 Accepted 76ms 3.77 MiB
#92 Accepted 22ms 3.77 MiB
#93 Accepted 30ms 3.77 MiB
#94 Accepted 39ms 3.77 MiB
#95 Accepted 64ms 3.816 MiB
#96 Accepted 26ms 3.816 MiB
#97 Accepted 27ms 3.773 MiB
#98 Accepted 29ms 3.77 MiB
#99 Accepted 27ms 3.77 MiB
#100 Accepted 54ms 3.77 MiB

Code

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
using ll = long long;

const int N = 1e5 + 3;

struct Segment_Tree {
    int t[4 * N];

    Segment_Tree() {
        memset(t, 0, sizeof t);
    }

    auto merge(auto &l, auto &r) { // <== Change this function
        return l + r;
    }
    void update(int node, int st, int en, int idx, int val) { //=> O(log n)
        if (st == en) {
            t[node] += val;
            return;
        }
        int mid = (st + en) >> 1;
        if (idx <= mid) update(node << 1, st, mid, idx, val);
        else update(node << 1 | 1, mid + 1, en, idx, val);
        // Merging left and right portion
        auto &Cur = t[node];
        auto &Left = t[node << 1];
        auto &Right = t[node << 1 | 1];
        Cur = merge(Left, Right);
        return;
    }
    int query(int node, int st, int en, int l, int r) { //=> O(log n)
        if (st > r || en < l) { // No overlapping and out of range
            return 0; // <== careful 
        }
        if (l <= st && en <= r) { // Complete overlapped (l-r in range)
            return t[node];
        }
        // Partial overlapping
        int mid = (st + en) >> 1;
        auto Left = query(node << 1, st, mid, l, r);
        auto Right = query(node << 1 | 1, mid + 1, en, l, r);
        return merge(Left, Right);
    }
} Left, Right;

int main() {
    ios::sync_with_stdio(false); cin.tie(0);
    int n;
    cin >> n;
    assert(n >= 1 && n <= 1e5);
    vector<int> v(n);
    for(auto &i: v) {
        cin >> i;
        assert(i >= 0 && i <= n - 1);
        Right.update(1, 0, n - 1, i, +1);
    }
    int ans = 0;
    for(auto i: v) {
        Right.update(1, 0, n - 1, i, -1);
        if(Right.query(1, 0, n - 1, i, n - 1) >= i or Left.query(1, 0, n - 1, 0, i) >= i) ++ans;
        Left.update(1, 0, n - 1, i, +1);
    }
    cout << ans << endl;
    return 0;
}

Information

Submit By
Type
Submission
Problem
P1184 The Curious Kid and the Number Game
Language
C++17 (G++ 13.2.0)
Submit At
2025-03-22 19:34:13
Judged At
2025-03-22 19:34:13
Judged By
Score
100
Total Time
76ms
Peak Memory
3.816 MiB