/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 2ms 1.066 MiB
#2 Accepted 2ms 1.086 MiB
#3 Accepted 2ms 1.27 MiB
#4 Accepted 2ms 1.27 MiB
#5 Accepted 2ms 1.27 MiB
#6 Accepted 2ms 1.27 MiB
#7 Accepted 3ms 1.312 MiB
#8 Accepted 3ms 1.27 MiB
#9 Accepted 3ms 1.27 MiB
#10 Accepted 3ms 1.25 MiB
#11 Accepted 3ms 1.27 MiB
#12 Accepted 6ms 1.27 MiB
#13 Accepted 6ms 1.27 MiB
#14 Accepted 6ms 1.312 MiB
#15 Accepted 2ms 1.27 MiB
#16 Accepted 2ms 1.066 MiB
#17 Accepted 2ms 1.27 MiB
#18 Accepted 2ms 1.312 MiB
#19 Accepted 6ms 1.27 MiB
#20 Accepted 6ms 1.27 MiB
#21 Accepted 6ms 1.27 MiB
#22 Accepted 6ms 1.27 MiB
#23 Accepted 2ms 1.27 MiB
#24 Accepted 2ms 1.07 MiB
#25 Accepted 2ms 1.066 MiB
#26 Accepted 2ms 1.496 MiB
#27 Accepted 2ms 1.27 MiB
#28 Accepted 3ms 1.27 MiB
#29 Accepted 3ms 1.27 MiB
#30 Accepted 4ms 1.27 MiB
#31 Accepted 4ms 1.27 MiB
#32 Accepted 4ms 1.312 MiB
#33 Accepted 4ms 1.27 MiB
#34 Accepted 2ms 1.27 MiB
#35 Accepted 2ms 1.27 MiB
#36 Accepted 2ms 1.496 MiB
#37 Accepted 2ms 1.27 MiB
#38 Accepted 2ms 1.109 MiB
#39 Accepted 2ms 1.203 MiB
#40 Accepted 2ms 1.27 MiB
#41 Accepted 3ms 1.523 MiB
#42 Accepted 3ms 1.52 MiB
#43 Accepted 6ms 1.566 MiB
#44 Accepted 7ms 1.715 MiB
#45 Accepted 8ms 1.52 MiB
#46 Accepted 8ms 1.52 MiB
#47 Accepted 8ms 1.52 MiB
#48 Accepted 8ms 1.711 MiB
#49 Accepted 4ms 1.52 MiB
#50 Accepted 3ms 1.523 MiB
#51 Accepted 3ms 1.52 MiB
#52 Accepted 3ms 1.52 MiB
#53 Accepted 3ms 1.562 MiB
#54 Accepted 3ms 1.52 MiB
#55 Accepted 3ms 1.52 MiB
#56 Accepted 3ms 1.52 MiB
#57 Accepted 5ms 1.52 MiB
#58 Accepted 5ms 1.52 MiB
#59 Accepted 9ms 1.52 MiB
#60 Accepted 9ms 1.52 MiB
#61 Accepted 25ms 4.02 MiB
#62 Accepted 9ms 4.02 MiB
#63 Accepted 7ms 3.77 MiB
#64 Accepted 8ms 4.02 MiB
#65 Accepted 8ms 4.07 MiB
#66 Accepted 7ms 4.043 MiB
#67 Accepted 8ms 3.906 MiB
#68 Accepted 7ms 3.953 MiB
#69 Accepted 7ms 4.023 MiB
#70 Accepted 8ms 3.98 MiB
#71 Accepted 15ms 6.273 MiB
#72 Accepted 12ms 6.379 MiB
#73 Accepted 11ms 6.09 MiB
#74 Accepted 13ms 6.391 MiB
#75 Accepted 13ms 6.211 MiB
#76 Accepted 12ms 6.34 MiB
#77 Accepted 13ms 6.395 MiB
#78 Accepted 11ms 6.273 MiB
#79 Accepted 12ms 6.465 MiB
#80 Accepted 12ms 6.574 MiB
#81 Accepted 18ms 7.5 MiB
#82 Accepted 14ms 7.605 MiB
#83 Accepted 14ms 7.27 MiB
#84 Accepted 16ms 7.469 MiB
#85 Accepted 36ms 7.586 MiB
#86 Accepted 17ms 7.535 MiB
#87 Accepted 17ms 7.797 MiB
#88 Accepted 15ms 7.75 MiB
#89 Accepted 14ms 7.566 MiB
#90 Accepted 15ms 7.77 MiB
#91 Accepted 178ms 62.059 MiB
#92 Accepted 114ms 63.215 MiB
#93 Accepted 141ms 60.152 MiB
#94 Accepted 128ms 62.27 MiB
#95 Accepted 148ms 62.148 MiB
#96 Accepted 116ms 61.695 MiB
#97 Accepted 121ms 63.094 MiB
#98 Accepted 122ms 63.02 MiB
#99 Accepted 118ms 61.961 MiB
#100 Accepted 122ms 63.121 MiB

Code

/**
 *    author:   Binoy Barman
 *    created:  2025-04-07 12:36:40
**/

#include<bits/stdc++.h>
#ifdef LOCAL
#include "algo/debug.h"
#else
#define dbg(...) 42
#endif
using namespace std;
using ll = long long;
const int mod = 1e9 + 7;
const int inf = 2e9;

#define int long long
#define nl '\n'
#define all(v) v.begin(), v.end()
#define clg(x) (32 - __builtin_clz(x))
#define Testcase_Handler int tts, tc = 0; cin >> tts; hell: while(tc++ < tts)
#define uniq(v) sort(all(v)), v.resize(distance(v.begin(), unique(v.begin(), v.end())))
template<class T> using minheap = priority_queue<T, vector<T>, greater<T>>;
template<typename T> istream& operator>>(istream& in, vector<T>& a) {for(auto &x : a) in >> x; return in;};
template<typename A, typename B> istream& operator>>(istream& in, pair<A, B>& p) {in >> p.first >> p.second; return in;};
template<typename T> ostream& operator<<(ostream& out, vector<T>& a) {bool first = true;for(auto &x : a) {if(!first) out << ' ';first = false;out << x;}return out;};

namespace Dark_Lord_Binoy {
inline void init() {
    ios::sync_with_stdio(false); 
    cin.tie(nullptr);

    #ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
}
}

const int N = 1e5 + 9;

long long a[N];
class PersistentSegTree {
  private:
    struct Node {
        int val;
        Node *lc, *rc;
        Node() : val(0) { lc = rc = NULL; }
        Node(int _val) : val(_val) { lc = rc = NULL; }
    } *ver[N];

    inline int combine(int a, int b) {
        return a + b;
    }
    inline void pull(Node *n) {
        n->val = n->lc->val + n->rc->val;
    }
    Node* build(int b, int e) {
        if(b == e) {
            Node *n = new Node(); // in leaf
            return n;
        }
        Node *n = new Node();
        int mid = (b + e) >> 1;

        n->lc = build(b, mid);
        n->rc = build(mid + 1, e);
        pull(n);
        return n;
    }
    Node* update(Node *n, int b, int e, int i, int v) {
        if(b == e) {
            Node *cn = new Node(n->val + v); // new leaf
            return cn;
        }
        Node *cn = new Node();
        int mid = (b + e) >> 1;

        if(i <= mid) {
            cn->lc = update(n->lc, b, mid, i, v);
            cn->rc = n->rc;
        } else {
            cn->lc = n->lc;
            cn->rc = update(n->rc, mid + 1, e, i, v);
        }
        pull(cn);
        return cn;
    }
    int query1(Node *R, Node *L, int b, int e, int k) {
        if(b == e) return b;
        int mid = (b + e) >> 1;
        int leftval = R->lc->val - L->lc->val;
        if(k <= leftval) {
            return query1(R->lc, L->lc, b, mid, k);
        } else {
            return query1(R->rc, L->rc, mid + 1, e, k - leftval);
        }
    }
    int query2(Node *R, Node *L, int b, int e, int i, int j) {
        if(i > e || b > j) return 0; //return null
        if (i <= b && e <= j) return R->val - L->val;
        int mid = (b + e) >> 1;
        return combine(query2(R->lc, L->lc, b, mid, i, j), query2(R->rc, L->rc, mid + 1, e, i, j));
    }

    const int tL, tR; // total [1, n]
    vector<Node *> nodes; // store all created nodes, to delete

  public:
    PersistentSegTree(int b, int e) : tL(b), tR(e) { ver[0] = build(b, e); }

    ~PersistentSegTree() {}

    // takes current version, generates new version from prev for current prefix, pos: freq+=v
    void point_upd(int cur_ver, int pos, int v) {
        ver[cur_ver] = update(ver[cur_ver - 1], tL, tR, pos, v); 
    }
    // takes r and (l-1)th version nodes, finds k-th minimum in range [l, r]
    int find_kth(int r_ver, int l_ver, int k) {
        return query1(ver[r_ver], ver[l_ver], tL, tR, k);
    }
    // takes r and (l-1)th version nodes, finds number of elements in range [i, j]
    int find_elements(int r_ver, int l_ver, int i, int j) {
        return query2(ver[r_ver], ver[l_ver], tL, tR, i, j);
    }
};

int32_t main() {
    Dark_Lord_Binoy::init();

    int n;
    cin >> n;
    PersistentSegTree t(0, n - 1);
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        t.point_upd(i, a[i], 1);
    }
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        int l = t.find_elements(i - 1, 0, 0, a[i]);
        int r = t.find_elements(n, i, a[i], n - 1);
        if(l >= a[i] || r >= a[i]) {
            ans++;
        }
    }
    cout << ans << nl;

    dbg(_Time_);
    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-04-07 07:41:30
Judged At
2025-04-07 07:41:30
Judged By
Score
100
Total Time
178ms
Peak Memory
63.215 MiB