#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+1<=n){
++i;
int left=min(a[i],a[i+1]);
int right=max(a[i],a[i+1]);
fen.update(left,-1);
fen.update(right,1);
--i;
}
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+1<=n){
++i;
int left=min(a[i],a[i-1]);
int right=max(a[i],a[i-1]);
fen.update(left,1);
fen.update(right,-1);
--i;
}
}else{
int x;
cin>>x;
cout<<fen.query(x)<<'\n';
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |