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... |