Submission #1169345

#TimeUsernameProblemLanguageResultExecution timeMemory
1169345mnbvcxz123Simple game (IZhO17_game)C++20
100 / 100
34 ms5192 KiB
#include<bits/stdc++.h>
using namespace std;
using ll=long long;

struct Fen{
    int n;
    vector<int>tree;
    void init(int N){
        n=N;
        tree.resize(n+5);
    }
    void update(int p, int x){
        for(;p<=n;p+=p&-p)tree[p]+=x;
    }
    int query(int i){
        int ret=0;
        for(;i;i-=i&-i)ret+=tree[i];
        return ret;
    }
};

int n,q;
int a[100005];
Fen fen;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cin>>n>>q;
    fen.init(1e6);
    for(int i=1;i<=n;++i){
        cin>>a[i];
        if(i>1){
            int left=min(a[i],a[i-1]);
            int right=max(a[i],a[i-1]);
            fen.update(left,1);
            fen.update(right,-1);
        }
    }
    while(q--){
        int c;
        cin>>c;
        if(c==1){
            int i,x;
            cin>>i>>x;
            if(i>1){
                int left=min(a[i],a[i-1]);
                int right=max(a[i],a[i-1]);
                fen.update(left,-1);
                fen.update(right,1);
            }
            if(i<n){
                int left=min(a[i],a[i+1]);
                int right=max(a[i],a[i+1]);
                fen.update(left,-1);
                fen.update(right,1);
            }
            a[i]=x;
            if(i>1){
                int left=min(a[i],a[i-1]);
                int right=max(a[i],a[i-1]);
                fen.update(left,1);
                fen.update(right,-1);
            }
            if(i<n){
                int left=min(a[i],a[i+1]);
                int right=max(a[i],a[i+1]);
                fen.update(left,1);
                fen.update(right,-1);
            }
        }else{
            int x;
            cin>>x;
            cout<<fen.query(x)<<'\n';
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...