/ SeriousOJ /

Record Detail

Wrong Answer


  
# 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 324.0 KiB
#5 Wrong Answer 1ms 532.0 KiB
#6 Wrong Answer 1ms 532.0 KiB

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(1,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);
        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:21:02
Judged At
2025-04-07 23:21:02
Judged By
Score
4
Total Time
1ms
Peak Memory
532.0 KiB