https://www.luogu.com.cn/record/228137330
:::error[错误代码]{open}
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
const int maxk=1e3+10;
int n,q,a[maxn],s[maxk],t[maxk],b[maxn],belong[maxn],delta[maxk];
void sort_block(int x){
for(int i=s[x];i<=t[x];i++) b[i]=a[i];
sort(b+s[x],b+t[x]+1);
}
void update(int l,int r,int x){
int u=belong[l],v=belong[r];
if(u==v){
for(int i=l;i<=r;i++){
a[i]+=x;
}
sort_block(u);
return;
}
for(int i=l;i<=t[u];i++) a[i]+=x;
for(int i=s[v];i<=r;i++) a[i]+=x;
for(int i=u+1;i<=v-1;i++) delta[i]+=x;
sort_block(u),sort_block(v);
}
int find(int l,int r,int x){
return r-(lower_bound(b+l,b+r+1,x)-b)+1;
}
int query(int l,int r,int x){
int u=belong[l],v=belong[r],sum=0;
if(u==v){
return find(l,r,x-delta[u]);
}
sum+=find(l,t[u],x-delta[u]);
for(int i=u+1;i<=v-1;i++) sum+=find(s[i],t[i],x-delta[i]);
sum+=find(s[v],r,x-delta[v]);
return sum;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>q;
for(int i=1;i<=n;i++) cin>>a[i];
int len=sqrt((double)n);
int k=(n-1)/len+1;
for(int i=1;i<=k;i++){
s[i]=(i-1)*len+1;
t[i]=i*len;
}
t[k]=n;
for(int i=1;i<=n;i++){
belong[i]=(i-1)/len+1;
}
for(int i=1;i<=k;i++) sort_block(i);
for(int i=1;i<=q;i++){
char op;int l,r,x;
cin>>op>>l>>r>>x;
if(op=='M') update(l,r,x);
else cout<<query(l,r,x)<<"\n";
}
return 0;
}
:::