/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 3ms 2.02 MiB
#2 Accepted 2ms 2.02 MiB
#3 Accepted 2ms 2.02 MiB
#4 Accepted 2ms 1.93 MiB
#5 Accepted 3ms 2.023 MiB
#6 Accepted 3ms 2.02 MiB
#7 Accepted 6ms 2.066 MiB
#8 Accepted 8ms 1.969 MiB
#9 Accepted 8ms 1.859 MiB
#10 Accepted 8ms 1.93 MiB
#11 Accepted 8ms 2.059 MiB
#12 Accepted 8ms 2.02 MiB
#13 Accepted 8ms 1.934 MiB
#14 Accepted 8ms 1.934 MiB
#15 Accepted 8ms 1.895 MiB
#16 Accepted 8ms 2.02 MiB
#17 Accepted 8ms 2.02 MiB
#18 Accepted 8ms 2.0 MiB
#19 Accepted 8ms 2.02 MiB
#20 Accepted 8ms 2.02 MiB
#21 Accepted 8ms 2.02 MiB
#22 Accepted 8ms 1.852 MiB
#23 Accepted 8ms 2.02 MiB
#24 Accepted 8ms 2.062 MiB
#25 Accepted 8ms 2.02 MiB
#26 Accepted 8ms 2.066 MiB
#27 Accepted 8ms 1.973 MiB
#28 Accepted 8ms 2.059 MiB
#29 Accepted 8ms 2.02 MiB
#30 Accepted 8ms 1.93 MiB
#31 Accepted 8ms 2.02 MiB
#32 Accepted 8ms 2.02 MiB
#33 Accepted 8ms 2.066 MiB
#34 Accepted 8ms 2.062 MiB
#35 Accepted 8ms 2.02 MiB
#36 Accepted 8ms 2.02 MiB
#37 Accepted 8ms 2.02 MiB
#38 Accepted 8ms 2.027 MiB
#39 Accepted 8ms 1.922 MiB
#40 Accepted 8ms 1.992 MiB
#41 Accepted 9ms 2.02 MiB
#42 Accepted 9ms 2.02 MiB
#43 Accepted 9ms 2.02 MiB
#44 Accepted 9ms 2.02 MiB
#45 Accepted 9ms 2.094 MiB
#46 Accepted 9ms 2.066 MiB
#47 Accepted 9ms 2.062 MiB
#48 Accepted 9ms 2.02 MiB
#49 Accepted 9ms 2.02 MiB
#50 Accepted 9ms 2.02 MiB
#51 Accepted 9ms 2.02 MiB
#52 Accepted 9ms 2.02 MiB
#53 Accepted 9ms 2.02 MiB
#54 Accepted 9ms 2.02 MiB
#55 Accepted 9ms 2.02 MiB
#56 Accepted 9ms 2.062 MiB
#57 Accepted 9ms 2.02 MiB
#58 Accepted 9ms 1.93 MiB
#59 Accepted 9ms 2.02 MiB
#60 Accepted 9ms 2.02 MiB
#61 Accepted 16ms 2.227 MiB
#62 Accepted 12ms 2.02 MiB
#63 Accepted 13ms 2.062 MiB
#64 Accepted 15ms 2.02 MiB
#65 Accepted 8ms 2.059 MiB
#66 Accepted 10ms 2.223 MiB
#67 Accepted 11ms 2.062 MiB
#68 Accepted 15ms 1.996 MiB
#69 Accepted 13ms 2.059 MiB
#70 Accepted 6ms 2.02 MiB
#71 Accepted 12ms 2.375 MiB
#72 Accepted 8ms 2.27 MiB
#73 Accepted 13ms 2.348 MiB
#74 Accepted 22ms 2.305 MiB
#75 Accepted 20ms 2.27 MiB
#76 Accepted 17ms 2.316 MiB
#77 Accepted 15ms 2.27 MiB
#78 Accepted 18ms 2.312 MiB
#79 Accepted 7ms 2.312 MiB
#80 Accepted 6ms 2.27 MiB
#81 Accepted 20ms 2.312 MiB
#82 Accepted 13ms 2.27 MiB
#83 Accepted 16ms 2.27 MiB
#84 Accepted 19ms 2.352 MiB
#85 Accepted 18ms 2.312 MiB
#86 Accepted 9ms 2.449 MiB
#87 Accepted 7ms 2.27 MiB
#88 Accepted 12ms 2.27 MiB
#89 Accepted 12ms 2.262 MiB
#90 Accepted 11ms 2.312 MiB
#91 Accepted 65ms 5.059 MiB
#92 Accepted 25ms 5.02 MiB
#93 Accepted 39ms 5.062 MiB
#94 Accepted 49ms 5.055 MiB
#95 Accepted 66ms 5.062 MiB
#96 Accepted 32ms 5.02 MiB
#97 Accepted 25ms 5.062 MiB
#98 Accepted 41ms 5.02 MiB
#99 Accepted 29ms 5.02 MiB
#100 Accepted 28ms 5.066 MiB

Code

#include<bits/stdc++.h>
#define ll long long
using namespace std;

int const N = 1e5 + 10;
vector<ll> a(N), arr(N);

class SegmentTree {
  public:
  int n;
  vector<ll> tree;
  SegmentTree(int n) : tree(2 * n + 10), n(n){};

  void build() {
    for (int i = 1; i <= n; i++) 
      tree[n + i] = arr[i];
    for (int i = n; i > 0; i--) 
      tree[i] = tree[i << 1] + tree[i << 1 | 1];
  }

  void upd(int pos, int value) {
    for (tree[pos += n] -= value; pos > 1; pos >>= 1)
      tree[pos >> 1] = tree[pos] + tree[pos ^ 1]; // Range sum
  }

  long long query(int l, int r) {
    long long res = 0;
    for (l += n, r += n + 1; l < r; l >>= 1, r >>= 1) {
      if (l & 1) res += tree[l++];
      if (r & 1) res += tree[--r];
    }
    return res;
  }
};

class SegmentTree2 {
  public:
  int n;
  vector<ll> tree;
  SegmentTree2(int n) : tree(2 * n + 10), n(n){};

  void build() {
    for (int i = 1; i <= n; i++) 
      tree[n + i] = 0;
    for (int i = n; i > 0; i--) 
      tree[i] = tree[i << 1] + tree[i << 1 | 1];
  }

  void upd(int pos, int value) {
    for (tree[pos += n] += value; pos > 1; pos >>= 1)
      tree[pos >> 1] = tree[pos] + tree[pos ^ 1]; // Range sum
  }

  long long query(int l, int r) {
    long long res = 0;
    for (l += n, r += n + 1; l < r; l >>= 1, r >>= 1) {
      if (l & 1) res += tree[l++];
      if (r & 1) res += tree[--r];
    }
    return res;
  }
};


int main() {
  // int t;
  // cin >> t;
  // while (t--){
    ll n, ans = 0;
    cin >> n;
    for (int i = 1; i <= n; i++){
      cin >> a[i];
      arr[a[i]]++;
    }
    SegmentTree r(n + 2);
    SegmentTree2 l(n + 2);
    l.build();
    r.build();
    for (int i = 1; i <= n; i++){
      r.upd(a[i], 1);
      ll x = l.query(0, a[i]);
      ll y = r.query(a[i], n);
      if (x >= a[i] || y >= a[i]) ans++;
      // cout << x << " " << y << endl;
      l.upd(a[i], 1);
    }
    cout << ans << endl;
  //}
}

Information

Submit By
Type
Submission
Problem
P1184 The Curious Kid and the Number Game
Contest
Brain Booster #9
Language
C++17 (G++ 13.2.0)
Submit At
2025-04-06 16:46:27
Judged At
2025-04-06 16:46:27
Judged By
Score
100
Total Time
66ms
Peak Memory
5.066 MiB