wuyiduo @ 2022-04-25 21:35:38
#include<bits/stdc++.h>
using namespace std;
const int N=1000010;
const int sN=1020;
int n,q,wx[N],yx[N],add[sN],size,ll,rr,cc;
char opt;
int cal(int x){
return (x-1)/size+1;
}
void qs(int x){
for(int i=(x-1)*size+1;i<=min(x*size,n);i++) yx[i]=wx[i];
sort(yx+(x-1)*size+1,yx+min(x*size,n)+1);
}
void modify(int a,int b,int w){
int l=cal(a),r=cal(b);
if(l==r){
for(int i=a;i<=b;i++) wx[i]+=w;
qs(l);
}
else{
for(int i=a;i<=l*size;i++) wx[i]+=w;
qs(l);
for(int i=l+1;i<r;i++) add[i]+=w;
for(int i=(r-1)*size+1;i<=b;i++) wx[i]+=w;
qs(r);
}
}
int query(int a,int b,int c){
int ans=0;
int l=cal(a),r=cal(b);
if(l==r){
for(int i=a;i<=b;i++)
if(wx[i]+add[l]>=c) ans++;
}
else{
for(int i=a;i<=l*size;i++)
if(wx[i]+add[l]>=c) ans++;
for(int i=l+1;i<r;i++){
int del=lower_bound(yx+(i-1)*size+1,yx+i*size+1,c-add[l])-&yx[(i-1)*size]-1;
ans+=size-del;
}
for(int i=(r-1)*size+1;i<=b;i++)
if(wx[i]+add[r]>=c) ans++;
}
return ans;
}
int main(){
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++) scanf("%d",&wx[i]);
size=sqrt(n);
int sum=n/size+1;
if(n%size==0) sum--;
for(int i=1;i<=sum;i++) qs(i);
while(q--){
cin>>opt;
scanf("%d%d%d",&ll,&rr,&cc);
if(opt=='M') modify(ll,rr,cc);
else printf("%d\n",query(ll,rr,cc));
}
return 0;
}