WTR2007 @ 2021-07-22 17:44:41
#include<bits/stdc++.h>
using namespace std;
inline long long int read(){
int f=1;
long long int w=0;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
w=(w<<1)+(w<<3)+(ch-48);
ch=getchar();
}
return w*f;
}
long long int a[1010050],b[1010050],c,d[1015],l,l1,r1,r;
void check1(char cnt){
if(cnt=='M'){
for(int i=l;i<=r;i++){
a[i]+=c;
}
l1=1000*(l/1000);
l=1000*(l/1000+1)-1;
sort(b+l1,b+l);
}
else{
int ans=0,x=l/1000+1;
for(int i=l;i<=r;i++){
if(a[i]+d[x]>=c) ans++;
}
cout<<ans<<endl;
}
}
void check2(char cnt){
int l1=1000*(l/1000+1)-1,r1=(r/1000)*1000;
if(cnt=='M'){
for(int i=l;i<=l1;i++){
a[i]+=c;
}
sort(b+(l/1000)*1000,b+l1);
for(int i=r1;i<=r;i++){
a[i]+=c;
}
sort(b+r1,b+(r/1000+1)*1000-1);
for(int i=l/1000+2;i<=r/1000;i++) d[i]+=c;
}
else{
int x=l/1000+1;
long long int ans=0;
for(int i=l;i<=l1;i++){
if(a[i]+d[x]>=c) ans++;
}
int y=r/1000+1;
for(int i=r1;i<=r;i++){
if(a[i]+d[y]>=c) ans++;
}
for(int i=x+1;i<y;i++){
int c1=c-d[i],e=(i-1)*1000,k=i*1000-1;
if(e==0) e++;
for(int j=e;j<=k;j++){
if(a[j]>=c1){
ans=ans+i*1000-j+1;
break;
}
}
}
cout<<ans<<endl;
}
}
int main(){
long long int n,q,k,t;
n=read();q=read();
for(int i=1;i<=n;i++){
a[i]=read();
b[i]=a[i];
}
for(int i=1;i<=n/1000+1;i++){
if(i>1) sort(b+1000*(i-1),b+1000*i-1);
else sort(b+1,b+999);
}
char tmp;
for(int i=1;i<=q;i++){
cin>>tmp;
l=read();r=read();c=read();
if(l/1000==r/1000) check1(tmp);
else check2(tmp);
}
return 0;
}
by sogk @ 2021-07-22 17:45:31
二分
by 违规用户名gAGt8$%z @ 2021-07-22 17:45:58
二 分 啊