This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define int long long
#define endl '\n'
using namespace std;
using namespace __gnu_pbds;
using ordered_set = tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>;
int N,L,R,V;
int seg[6000000];
void slv(int l=1,int r=N,int in=1){
    if(l>R||r<L)return;
    if(l>=L&&r<=R){
        seg[in]+=V;
        return;
    }
    int mid=(l+r)/2;
    slv(l,mid,in*2);slv(mid+1,r,in*2+1);
}
void add(int l,int r,int v){
    if(l>r)swap(l,r);
    if(r==l+1)return;
    L=l,R=r,V=v;
    slv();
}
signed main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int n,m;
    cin>>n>>m;
    N=exp2(ceil(log2(1000000)));
    int arr[n];
    for(int i=0;i<n;i++){
        cin>>arr[i];
        if(i)add(arr[i],arr[i-1],1);
    }
    while(m--){
        int t;
        cin>>t;
        if(t&1){
            int in,x;
            cin>>in>>x;
            in--;
            if(in)add(arr[in],arr[in-1],-1);
            if(in<n-1)add(arr[in],arr[in+1],-1);
            arr[in]=x;
            if(in)add(arr[in],arr[in-1],1);
            if(in<n-1)add(arr[in],arr[in+1],1);
        }else{
            int h,ans=0;
            cin>>h;
            h+=N-1;
            while(h){
                ans+=seg[h];
                h/=2;
            }
            cout<<ans<<endl;
        }
    }
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |