第一次写分块 为什么WA#11了
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 10 , M = 1100;
int L[M] , R[M] , id[N];
int n , q , tag[M] , t;
struct node{
int val , pos;
} a[N];
inline bool cmp(node a, node b){
return a.val > b.val;
}
inline void Build(){
t = sqrt(n);
for (int i = 1 ; i <= t ; i++){
L[i] = (i - 1) * t + 1 , R[i] = t * i;
}
if(R[t] < n) ++t , L[t] = R[t - 1] + 1 , R[t] = n;
for (int i = 1 ; i <= t ; i++){
for (int j = L[i] ; j <= R[i] ; j++){
id[j] = i;
}
}
for (int i = 1 ; i <= t ; i++){
sort(a + L[i] , a + R[i] + 1 , cmp);
}
}
inline void Add(int l , int r , int v){
int kl = id[l] , kr = id[r];
if(kl == kr){
for (int i = L[kl] ; i <= R[kr] ; i++){
if(a[i].pos >= l && a[i].pos <= r)a[i].val += v;
}
}
else{
for(int i = kl + 1 ; i < kr ; i++) tag[i] += v;
for (int i = L[kl] ; i <= R[kl] ; i++){
if(a[i].pos >= l && a[i].pos <= r) a[i].val += v;
}
for (int i = L[kr] ; i <= R[kr] ; i++){
if(a[i].pos >= l && a[i].pos <= r) a[i].val += v;
}
}
}
inline int calc(int idx , int val){
int l = L[idx] , r = R[idx];
while(l < r){
int mid = (l + r + 1) >> 1;
if(a[mid].val >= val) l = mid;
else r = mid - 1;
}
if(a[l].val < val) return 0;
return l - L[idx] + 1;
}
inline int Ask(int l , int r , int s){
int kl = id[l] , kr = id[r] , res = 0;
if(kl == kr){
for (int i = L[kl] ; i <= R[kr] ; i++){
if(a[i].pos >= l && a[i].pos <= r && a[i].val + tag[id[i]] >= s) res++;
}
}
else{
for (int i = kl + 1 ; i < kr ; i++){
res += calc(i , s - tag[i]);
}
for (int i = l ; i <= R[kl] ; i++){
if(a[i].pos >= l && a[i].pos <= r && a[i].val + tag[id[i]] >= s) res++;
}
for (int i = L[kr] ; i <= r ; i++){
if(a[i].pos >= l && a[i].pos <= r && a[i].val + tag[id[i]] >= s) res++;
}
}
return res;
}
signed main(){
ios::sync_with_stdio(false) , cin.tie(0);
cin >> n >> q;
for (int i = 1; i <= n ; i++){
cin >> a[i].val;
a[i].pos = i;
}
Build();
char s[2];
int l , r , c;
for (int i = 1 ; i <= q ; i++){
cin >> s >> l >> r >> c;
if(s[0] == 'M') Add(l , r , c);
else cout << Ask(l , r , c) << "\n";
}
return 0;
}
/*
100 5
40 7 47 44 52 81 87 60 82 49 40 30 44 90 62 68 81 44 46 17 44 71 89 79 44 95 57 4 6 36 26 61 62 64 14 93 46 35 20 98 55 6 71 9 85 31 1 70 93 100 82 33 57 14 83 56 40 67 27 53 43 39 44 4 59 32 49 72 91 60 67 84 16 64 9 21 59 30 100 34 47 62 10 9 56 88 19 20 16 92 22 11 68 56 62 16 77 94 20 10
M 66 67 1
M 82 97 13
M 14 90 20
M 47 76 7
A 58 86 80
*/