前言
思路
将关系 a [ i ] < = a [ i − 1 ] a[i]<=a[i-1] a[i]<=a[i−1]转换成1 | 0 然后通过前缀和记录
当我们需要修改的时候,我们只需要枚举四个状态
然后分别对应modify即可
具体看代码
CODE
int lowbit(int x){
return x &(-x);
}
void modify(int k,int x)
{
for(int i = k;i<=n;i+=lowbit(i))
b[i]+=x;
}
int query(int k)
{
int ans = 0;
for(int i = k;i>0;i-=lowbit(i))
ans+=b[i];
return ans;
}
int query(int l,int r)
{
return query(r) - query(l);
}
void solve()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
modify(i,(a[i]>=a[i-1]));
for(int i=1;i<=m;i++)
{
int op;cin>>op;
if(op == 1)
{
int k,x;
cin>>k>>x;
if((a[k]>=a[k-1])>(x>=a[k-1])) modify(k,-1);
if((a[k]>=a[k-1])<(x>=a[k-1])) modify(k,1);
if((a[k]>=a[k+1])>(x>=a[k+1])) modify(k+1,1);
if((a[k]>=a[k+1])<(x>=a[k+1])) modify(k+1,-1);
a[k]=x;
}else
{
int l,r;
cin>>l>>r;
if(query(l,r) == r-l)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
}