/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 764.0 KiB
#2 Accepted 1ms 536.0 KiB
#3 Accepted 1ms 384.0 KiB
#4 Accepted 1ms 352.0 KiB
#5 Accepted 1ms 532.0 KiB
#6 Accepted 1ms 532.0 KiB
#7 Accepted 1ms 508.0 KiB
#8 Accepted 1ms 532.0 KiB
#9 Accepted 1ms 532.0 KiB
#10 Accepted 1ms 324.0 KiB
#11 Accepted 1ms 532.0 KiB
#12 Accepted 1ms 532.0 KiB
#13 Accepted 1ms 532.0 KiB
#14 Accepted 1ms 532.0 KiB
#15 Accepted 1ms 408.0 KiB
#16 Accepted 1ms 532.0 KiB
#17 Accepted 1ms 564.0 KiB
#18 Accepted 1ms 532.0 KiB
#19 Accepted 1ms 536.0 KiB
#20 Accepted 1ms 532.0 KiB
#21 Accepted 1ms 344.0 KiB
#22 Accepted 1ms 396.0 KiB
#23 Accepted 1ms 532.0 KiB
#24 Accepted 1ms 532.0 KiB
#25 Accepted 1ms 532.0 KiB
#26 Accepted 1ms 532.0 KiB
#27 Accepted 1ms 532.0 KiB
#28 Accepted 1ms 484.0 KiB
#29 Accepted 1ms 532.0 KiB
#30 Accepted 1ms 440.0 KiB
#31 Accepted 1ms 480.0 KiB
#32 Accepted 1ms 484.0 KiB
#33 Accepted 1ms 536.0 KiB
#34 Accepted 1ms 508.0 KiB
#35 Accepted 1ms 360.0 KiB
#36 Accepted 1ms 444.0 KiB
#37 Accepted 1ms 532.0 KiB
#38 Accepted 1ms 444.0 KiB
#39 Accepted 1ms 532.0 KiB
#40 Accepted 1ms 536.0 KiB
#41 Accepted 2ms 528.0 KiB
#42 Accepted 2ms 444.0 KiB
#43 Accepted 2ms 600.0 KiB
#44 Accepted 2ms 500.0 KiB
#45 Accepted 2ms 576.0 KiB
#46 Accepted 2ms 532.0 KiB
#47 Accepted 2ms 532.0 KiB
#48 Accepted 2ms 672.0 KiB
#49 Accepted 2ms 528.0 KiB
#50 Accepted 2ms 560.0 KiB
#51 Accepted 2ms 484.0 KiB
#52 Accepted 2ms 640.0 KiB
#53 Accepted 2ms 532.0 KiB
#54 Accepted 2ms 668.0 KiB
#55 Accepted 2ms 532.0 KiB
#56 Accepted 2ms 576.0 KiB
#57 Accepted 2ms 484.0 KiB
#58 Accepted 2ms 532.0 KiB
#59 Accepted 2ms 580.0 KiB
#60 Accepted 2ms 532.0 KiB
#61 Accepted 6ms 1.02 MiB
#62 Accepted 4ms 1.02 MiB
#63 Accepted 4ms 1.062 MiB
#64 Accepted 5ms 1.02 MiB
#65 Accepted 5ms 1.02 MiB
#66 Accepted 5ms 1.094 MiB
#67 Accepted 7ms 1.02 MiB
#68 Accepted 10ms 1.023 MiB
#69 Accepted 11ms 1.02 MiB
#70 Accepted 12ms 920.0 KiB
#71 Accepted 26ms 1.422 MiB
#72 Accepted 15ms 1.316 MiB
#73 Accepted 7ms 1.52 MiB
#74 Accepted 9ms 1.52 MiB
#75 Accepted 9ms 1.52 MiB
#76 Accepted 7ms 1.523 MiB
#77 Accepted 7ms 1.52 MiB
#78 Accepted 9ms 1.488 MiB
#79 Accepted 12ms 1.52 MiB
#80 Accepted 13ms 1.523 MiB
#81 Accepted 23ms 1.777 MiB
#82 Accepted 8ms 1.723 MiB
#83 Accepted 6ms 1.57 MiB
#84 Accepted 9ms 1.77 MiB
#85 Accepted 11ms 1.785 MiB
#86 Accepted 10ms 1.566 MiB
#87 Accepted 20ms 1.773 MiB
#88 Accepted 17ms 1.77 MiB
#89 Accepted 8ms 1.77 MiB
#90 Accepted 10ms 1.77 MiB
#91 Accepted 92ms 10.27 MiB
#92 Accepted 43ms 10.352 MiB
#93 Accepted 60ms 10.426 MiB
#94 Accepted 79ms 10.316 MiB
#95 Accepted 59ms 10.27 MiB
#96 Accepted 48ms 10.469 MiB
#97 Accepted 47ms 10.27 MiB
#98 Accepted 46ms 10.27 MiB
#99 Accepted 50ms 10.43 MiB
#100 Accepted 52ms 10.27 MiB

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl "\n"
#define ff first
#define ss second
#define pb push_back
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
#define f(i,x,y) for(int i=x;i<y;i++)
#define f2(i,x,y) for(int i=x;i>=y;i--)
#define pii pair<int,int>
#define Fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
const int MOD =1000000007;
const int INF = 1e18;
const int N = 2e5;
class SegmentTree
{
public:
    int n;
    vector<int>tree,arr;
    SegmentTree(vector<int>&v){
        n = v.size();
        arr = v;
        tree.assign(4*n,0);
        build(1,0,n-1);
    }
    void update(int ind,int val){update(1,0,n-1,ind,val);}
    int query(int l,int r){return query(1,0,n-1,l,r);}
private:
    int merge(int a,int b){
        return (a+b);
    }
    void build(int node,int start,int end){
        if(start==end)tree[node] = arr[start];
        else {
            int mid = (start+end)/2;
            build(2*node,start,mid);
            build(2*node+1,mid+1,end);
            tree[node] = merge(tree[2*node],tree[2*node+1]);
        }
    }
    void update(int node,int start,int end,int ind,int val){
        if(ind<start or ind>end)return;
        if(start==end)tree[node] += val;
        else {
            int mid = (start+end)/2;
            if(start<=ind and ind<=mid)update(2*node,start,mid,ind,val);
            else update(2*node+1,mid+1,end,ind,val);
            tree[node] = merge(tree[2*node],tree[2*node+1]);
        }
    }
    int query(int node,int start,int end,int l,int r){
        if(end<l or start>r)return 0;
        if(start==end)return tree[node];
        else if(l<=start and end<=r)return tree[node];
        else{
            int mid = (start+end)/2;
            int left = query(2*node,start,mid,l,r);
            int right = query(2*node+1,mid+1,end,l,r);
            return merge(left,right);
        }
    }
};
void solve(int tc){
    int n; cin >> n;
    vector<int>v(n),is(n),gg(n+1);
    for(int i=0;i<n;i++)
        cin  >> v[i];
    SegmentTree seg(gg);
    for(int i=0;i<n;i++){
        int tot = seg.query(0,v[i]);
        is[i] |= tot >= v[i];
        seg.update(v[i],1); 
    }
    gg.assign(n+1,0);
    SegmentTree peg(gg);
    for(int i=n-1;i>=0;i--){
        int tot = peg.query(v[i],n-1);
        is[i] |= tot >= v[i];
        peg.update(v[i],1); 
    }
    cout << accumulate(all(is),0ll) << endl;
}
int32_t main(){

    Fast

    int t=1;

    // cin >> t;

    for(int tc=1;tc<=t;tc++){

        solve(tc);
    }
    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 23:22:46
Judged At
2025-04-07 23:22:46
Judged By
Score
100
Total Time
92ms
Peak Memory
10.469 MiB