Submission #1358262

#TimeUsernameProblemLanguageResultExecution timeMemory
1358262lizi14Simple game (IZhO17_game)C++20
100 / 100
92 ms9388 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define f first
#define ss second
#define ina insert
#define pb push_back
const int N=2e6;
int tree[N];
int n;
int MAX_H=1000005;
int read(int idx){
    int sum=0;
    while(idx>0){
        sum+=tree[idx];
        idx=idx-(idx&(-idx));
    }
    return sum;
}

void update(int idx, int val){
    if(idx<=0|| idx>=MAX_H)return;
    while(idx<MAX_H){
        tree[idx]+=val;
        idx+=(idx&(-idx));
    }
}

signed main(){
    int m;
    cin>>n>>m;
    vector<int>x(n+1);
    for(int i=1; i<=n; i++){
        cin>>x[i];
        //update(i,1);
        
    }
    for(int i=1; i<n; i++){
        int a=min(x[i], x[i+1]);
        int b=max(x[i], x[i+1]);
        update(a,1);
        update(b+1,-1);
    }
    
    for(int q=0; q<m; q++){
        int u;
        cin>>u;
        if(u==1){
            int l,r;
            cin>>l>>r;
            //l--;
            
            if(l>1){
                int a=min(x[l],x[l-1]);
                int b=max(x[l],x[l-1]);
                update(a,-1);
                update(b+1,1);
            }
            if(l<n){
                int a=min(x[l],x[l+1]);
                int b=max(x[l],x[l+1]);
                update(a,-1);
                update(b+1,1);
            }
            x[l]=r;
            
            if(l>1){
                int a=min(r,x[l-1]);
                int b=max(r,x[l-1]);
                update(a,1);
                update(b+1,-1);
            }
            if(l<n){
                int a=min(r,x[l+1]);
                int b=max(r,x[l+1]);
                update(a,1);
                update(b+1,-1);
            }
            
        }
        else{
            int y;
            cin>>y;
            int bati=read(y);
            cout<<bati<<endl;
        }
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...