问a2那部分可以怎么优化,好像说可以用二分但不会
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
long long st[N],ed[N],a[N],n,c,k,fk[N],q,x,y,z,t[N];
char o;
void a1(int u,int v,int w){
int p=fk[u],q=fk[v];
if(p==q){
for(int i=u;i<=v;i++)a[i]+=w;
}
else{
for(int i=p+1;i<q;i++)t[i]+=w;
for(int i=u;i<=ed[p];i++)a[i]+=w;
for(int i=st[q];i<=v;i++)a[i]+=w;
}
return;
}
long long a2(int u,int v,int w){
long long s=0;
for(int i=u;i<=v;i++){
if(a[i]+t[fk[i]]>=w)s++;
}
return s;
}
int main(){
cin>>n>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
}
c=sqrt(n);
k=n/c;
if(n%c!=0)k++;
for(int i=1;i<=k;i++){
st[i]=(i-1)*c+1;
ed[i]=i*c;
}
ed[k]=n;
for(int i=1;i<=n;i++){
fk[i]=(i-1)/c+1;
}
while(q--){
cin>>o;
if(o=='M'){
cin>>x>>y>>z;
a1(x,y,z);
}
else{
cin>>x>>y>>z;
cout<<a2(x,y,z)<<'\n';
}
}
return 0;
}