/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 1ms 532.0 KiB
#3 Accepted 1ms 532.0 KiB
#4 Accepted 1ms 532.0 KiB
#5 Accepted 1ms 532.0 KiB
#6 Accepted 1ms 532.0 KiB
#7 Accepted 1ms 532.0 KiB
#8 Accepted 1ms 532.0 KiB
#9 Accepted 1ms 532.0 KiB
#10 Accepted 1ms 564.0 KiB
#11 Accepted 1ms 324.0 KiB
#12 Accepted 1ms 532.0 KiB
#13 Accepted 1ms 320.0 KiB
#14 Accepted 1ms 532.0 KiB
#15 Accepted 1ms 536.0 KiB
#16 Accepted 1ms 320.0 KiB
#17 Accepted 1ms 532.0 KiB
#18 Accepted 2ms 768.0 KiB
#19 Accepted 2ms 340.0 KiB
#20 Accepted 4ms 324.0 KiB
#21 Accepted 4ms 324.0 KiB
#22 Accepted 4ms 532.0 KiB
#23 Accepted 4ms 532.0 KiB
#24 Accepted 4ms 532.0 KiB
#25 Accepted 4ms 532.0 KiB
#26 Accepted 4ms 532.0 KiB
#27 Accepted 4ms 532.0 KiB
#28 Accepted 4ms 532.0 KiB
#29 Accepted 4ms 532.0 KiB
#30 Accepted 4ms 324.0 KiB
#31 Accepted 5ms 532.0 KiB
#32 Accepted 5ms 532.0 KiB
#33 Accepted 4ms 532.0 KiB
#34 Accepted 4ms 532.0 KiB
#35 Accepted 5ms 344.0 KiB
#36 Accepted 4ms 532.0 KiB
#37 Accepted 4ms 532.0 KiB
#38 Accepted 4ms 532.0 KiB
#39 Accepted 4ms 532.0 KiB
#40 Accepted 4ms 532.0 KiB
#41 Accepted 7ms 696.0 KiB
#42 Accepted 6ms 580.0 KiB
#43 Accepted 6ms 532.0 KiB
#44 Accepted 6ms 536.0 KiB
#45 Accepted 6ms 532.0 KiB
#46 Accepted 6ms 532.0 KiB
#47 Accepted 6ms 532.0 KiB
#48 Accepted 6ms 532.0 KiB
#49 Accepted 6ms 532.0 KiB
#50 Accepted 6ms 604.0 KiB
#51 Accepted 7ms 580.0 KiB
#52 Accepted 6ms 568.0 KiB
#53 Accepted 6ms 532.0 KiB
#54 Accepted 6ms 532.0 KiB
#55 Accepted 6ms 532.0 KiB
#56 Accepted 6ms 580.0 KiB
#57 Accepted 6ms 536.0 KiB
#58 Accepted 6ms 532.0 KiB
#59 Accepted 6ms 576.0 KiB
#60 Accepted 6ms 576.0 KiB
#61 Accepted 21ms 1.188 MiB
#62 Accepted 15ms 1.117 MiB
#63 Accepted 8ms 1.27 MiB
#64 Accepted 7ms 1.27 MiB
#65 Accepted 7ms 1.266 MiB
#66 Accepted 6ms 1.27 MiB
#67 Accepted 8ms 1.27 MiB
#68 Accepted 8ms 1.27 MiB
#69 Accepted 15ms 1.25 MiB
#70 Accepted 16ms 1.062 MiB
#71 Accepted 26ms 1.77 MiB
#72 Accepted 8ms 1.812 MiB
#73 Accepted 10ms 1.902 MiB
#74 Accepted 13ms 1.812 MiB
#75 Accepted 13ms 1.812 MiB
#76 Accepted 12ms 1.738 MiB
#77 Accepted 15ms 1.906 MiB
#78 Accepted 14ms 1.82 MiB
#79 Accepted 17ms 1.75 MiB
#80 Accepted 17ms 1.816 MiB
#81 Accepted 18ms 2.02 MiB
#82 Accepted 12ms 2.066 MiB
#83 Accepted 15ms 2.02 MiB
#84 Accepted 17ms 2.066 MiB
#85 Accepted 17ms 2.02 MiB
#86 Accepted 15ms 2.02 MiB
#87 Accepted 12ms 2.023 MiB
#88 Accepted 14ms 2.02 MiB
#89 Accepted 14ms 2.207 MiB
#90 Accepted 15ms 2.02 MiB
#91 Accepted 121ms 13.812 MiB
#92 Accepted 73ms 13.863 MiB
#93 Accepted 83ms 13.949 MiB
#94 Accepted 88ms 13.773 MiB
#95 Accepted 88ms 13.945 MiB
#96 Accepted 81ms 13.77 MiB
#97 Accepted 81ms 13.941 MiB
#98 Accepted 82ms 13.77 MiB
#99 Accepted 80ms 13.941 MiB
#100 Accepted 81ms 13.941 MiB

Code

#include <bits/stdc++.h>

#define F first
#define S second
// #define int long long
#define double long double
#define eb emplace_back
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define sz(x) (int)x.size()
#define mp(x, y) make_pair(x, y)
#define lb lower_bound
#define ub upper_bound
#define ins insert
#define INF (int)1e18
using namespace std;

using pii = pair<int, int>;
using pdd = pair<double, double>;
using pbb = pair<bool, bool>;
using pcc = pair<char, char>;
using pss = pair<string, string>;
using vi = vector<int>;
using vd = vector<double>;
using vb = vector<bool>;
using vc = vector<char>;
using vs = vector<string>;
using vpii = vector<pair<int, int>>;
using vpdd = vector<pair<double, double>>;
using vpbb = vector<pair<bool, bool>>;
using vpcc = vector<pair<char, char>>;
using vpss = vector<pair<string, string>>;
using vvi = vector<vector<int>>;
using vvd = vector<vector<double>>;
using vvb = vector<vector<bool>>;
using vvc = vector<vector<char>>;
using vvs = vector<vector<string>>;
using vvpii = vector<vector<pair<int, int>>>;
using vvpdd = vector<vector<pair<double, double>>>;
using vvpbb = vector<vector<pair<bool, bool>>>;
using vvpcc = vector<vector<pair<char, char>>>;
using vvpss = vector<vector<pair<string, string>>>;

// clang-format off
template <class T> using pq = priority_queue<T>;
template <class T> using pqg = priority_queue<T, vector<T>, greater<T>>;
template <class T> T sqrt_(T elem) {int l=1,r=elem;while(l<=r){int mid=l+(r-l)/2LL;if(mid>elem/mid){r=mid-1;}else{int val=mid*mid;if(val<=elem){l=mid+1;}else{r=mid-1;}}}return r;}
template <class T> T ceil_(T a,T b) {return(a+b-1)/b;};
template <class T> T mod_add(T a,T b,T mod){return((a%mod)+(b%mod))% mod;}
template <class T> T mod_sub(T a,T b,T mod){return((a%mod)-(b%mod)+mod)%mod;}
template <class T> T mod_mul(T a,T b,T mod){return((a%mod)*(b%mod))%mod;}
template <class T> T mod_inv(T a,T mod){T m0=mod,y=0,x=1;if(mod==1)return 0;while(a>1){T q=a/mod;T t=mod;mod=a%mod,a=t;t=y;y=x-q*y;x=t;}if(x<0)x+=m0;return x;}
template <class T> T mod_div(T a,T b,T mod){return mod_mul(a,mod_inv(b,mod),mod);}
// clang-format on
struct SegmentTree {
  int n;
  vector<long long> tree, lazy;

  SegmentTree(int size) {
    n = size;
    tree.assign(4 * n, 0);
    lazy.assign(4 * n, 0);
  }

  void push(int node, int l, int r) {
    if (lazy[node] != 0) {
      tree[node] += (r - l + 1) * lazy[node];

      if (l != r) {
        lazy[2 * node] += lazy[node];
        lazy[2 * node + 1] += lazy[node];
      }

      lazy[node] = 0;
    }
  }

  void add(int node, int l, int r, int ql, int qr, long long val) {
    push(node, l, r);

    if (qr < l || r < ql)
      return;
    if (ql <= l && r <= qr) {
      lazy[node] += val;
      push(node, l, r);
      return;
    }

    int mid = (l + r) / 2;
    add(2 * node, l, mid, ql, qr, val);
    add(2 * node + 1, mid + 1, r, ql, qr, val);
    tree[node] = tree[2 * node] + tree[2 * node + 1];
  }

  long long sum(int node, int l, int r, int ql, int qr) {
    push(node, l, r);

    if (qr < l || r < ql)
      return 0;
    if (ql <= l && r <= qr)
      return tree[node];

    int mid = (l + r) / 2;
    return sum(2 * node, l, mid, ql, qr) +
           sum(2 * node + 1, mid + 1, r, ql, qr);
  }

  void add(int l, int r, long long val) { add(1, 0, n - 1, l, r, val); }

  long long sum(int l, int r) { return sum(1, 0, n - 1, l, r); }
};

void solve() {
  int n;
  cin >> n;

  vi a(n + 1);
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }

  SegmentTree st1(n + 2);
  SegmentTree st2(n + 2);

  vi pre(n + 1), suff(n + 1);

  for (int i = 1; i <= n; i++) {
    pre[i] = st1.sum(0, a[i]);
    st1.add(a[i], a[i], 1LL);
  }

  for (int i = n; i >= 1; i--) {
    suff[i] = st2.sum(a[i], n);
    st2.add(a[i], a[i], 1LL);
  }

  int ans = 0;
  for (int i = 1; i <= n; i++) {
    if (max(pre[i], suff[i]) >= a[i]) {
      ans++;
    }
  }
  cout << ans << '\n';
  return;
}

signed main() {

  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

  int tt = 1, count = 1;
  // cin >> tt;
  while (tt--) {
    // cout << "Case #" << count << ": ";
    solve();
    ++count;
  }
  return 0;
}

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:12:33
Judged At
2025-04-06 16:12:33
Judged By
Score
100
Total Time
121ms
Peak Memory
13.949 MiB