1 #include<cstdio>
2 #include<cstring>
3 #include<algorithm>
4 #include<cmath>
5
6 #define maxn 1000001
7
8 using namespace std;
9
10 int n,a[maxn],team[maxn],b[maxn],str[maxn],end[maxn],tag[1001];
11
12 inline int in()
13 {
14 int x=0;char ch=getchar();
15 while(ch<‘0‘||ch>‘9‘)ch=getchar();
16 while(ch<=‘9‘&&ch>=‘0‘)x=x*10+ch-‘0‘,ch=getchar();
17 return x;
18 }
19
20 void pre()
21 {
22 int T=sqrt(n),cnt;
23 for(int i=1;i<=n;i++)
24 team[i]=(i-1)/T+1;
25 cnt=team[n];
26 for(int i=1;i<=n;i++)end[team[i]]=i,b[i]=a[i];
27 for(int i=n;i>=1;i--)str[team[i]]=i;
28 for(int i=1;i<=cnt;i++)
29 sort(str[i]+b,b+end[i]+1);
30 }
31
32 void add(int l,int r,int c)
33 {
34 if(team[l]==team[r]){
35 for(int i=l;i<=r;i++)a[i]+=c;
36 for(int i=str[team[l]];i<=end[team[r]];i++)b[i]=a[i];
37 sort(str[team[l]]+b,end[team[l]]+b);
38 return;
39 }
40 for(int i=l;i<=end[team[l]];i++)
41 a[i]+=c;
42 for(int j=str[team[r]];j<=r;j++)
43 a[j]+=c;
44 for(int i=str[team[l]];i<=end[team[l]];i++)b[i]=a[i];
45 for(int i=str[team[r]];i<=end[team[r]];i++)b[i]=a[i];
46 sort(str[team[l]]+b,end[team[l]]+b+1);
47 sort(str[team[r]]+b,end[team[r]]+b+1);
48 for(int i=team[l]+1;i<=team[r]-1;i++)
49 tag[i]+=c;
50 }
51
52 int binary_search(int pos,int c)
53 {
54 int l=str[pos],r=end[pos];
55 if(b[r]<c)return r+1;
56 while(l<=r)
57 {
58 int mid=(l+r)>>1;
59 if(b[mid]<c)l=mid+1;
60 else r=mid-1;
61 }
62 return l;
63 }
64
65 int query(int l,int r,int c)
66 {
67 int ans=0;
68 if(team[l]==team[r]){
69 for(int i=l;i<=r;i++)if(a[i]+tag[team[l]]>=c)ans++;
70 return ans;
71 }
72 for(int i=l;i<=end[team[l]];i++)
73 if(a[i]+tag[team[l]]>=c)ans++;
74 for(int j=str[team[r]];j<=r;j++)
75 if(a[j]+tag[team[r]]>=c)ans++;
76 for(int i=team[l]+1;i<=team[r]-1;i++)
77 ans+=end[i]-binary_search(i,c-tag[i])+1;
78 return ans;
79 }
80
81 int main()
82 {
83 int q,u,v,c;
84 char sb;
85 n=in();q=in();
86 for(int i=1;i<=n;i++)a[i]=in();
87 pre();
88 for(int i=1;i<=q;i++)
89 {
90 sb=0;
91 while(sb!=‘A‘&&sb!=‘M‘)sb=getchar();
92 u=in(),v=in(),c=in();
93 if(sb==‘A‘)printf("%d\n",query(u,v,c));
94 else add(u,v,c);
95 }
96 return 0;
97 }