#include<bits/stdc++.h>
using namespace std;
int n;
int a[50005];
int b[50005];
int block;
int st[50005],ed[50005];
int tag[50005];
int bl[50005];
int find(int x) {
return bl[x];
}
int ef(int lt,int rt,int val){
lt--;
rt++;
while(lt+1<rt){
int mid=lt+rt>>1;
if(b[mid]+tag[bl[mid]]<=val){
lt=mid;
}
else{
rt=mid;
}
}
return lt;
}
void update(int lt,int rt,int val) {
int tmp1=find(lt);
int tmp2=find(rt);
if(tmp1==tmp2) {
for(int i=lt; i<=rt; i++) {
a[i]+=val;
}
for(int i=st[tmp1]; i<=ed[tmp1]; i++) {
b[i]=a[i];
}
sort(b+st[tmp1],b+ed[tmp1]+1);
return;
}
for(int i=tmp1+1; i<tmp2; i++) {
tag[i]+=val;
}
for(int i=lt; i<=ed[tmp1]; i++) {
a[i]+=val;
}
for(int i=st[tmp1]; i<=ed[tmp1]; i++) {
b[i]=a[i];
}
sort(b+st[tmp1],b+ed[tmp1]+1);
for(int i=st[tmp2]; i<=rt; i++) {
a[i]+=val;
}
for(int i=st[tmp2]; i<=ed[tmp2]; i++) {
b[i]=a[i];
}
sort(b+st[tmp2],b+ed[tmp2]+1);
return;
}
void query(int lt,int rt,int val){
int tmp1=find(lt);
int tmp2=find(rt);
if(tmp1==tmp2){
printf("%d\n",ef(lt,rt,val)-lt+1);
return;
}
int sum=0;
for(int i=tmp1+1;i<tmp2;i++){
sum+=ef(st[i],ed[i],val)-st[i]+1;
}
for(int i=lt;i<=ed[tmp1];i++){
if(b[i]>val){
break;
}
sum++;
}
for(int i=st[tmp2];i<=rt;i++){
if(b[i]>val){
break;
}
sum++;
}
printf("%d\n",sum);
return;
}
int main() {
scanf("%d",&n);
for(int i=1; i<=n; i++) {
scanf("%d",&a[i]);
b[i]=a[i];
}
block=sqrt(n);
for(int i=1; i<=block; i++) {
st[i]=ed[i-1]+1;
ed[i]=st[i]+block-1;
}
if(block*block!=n) {
block++;
st[block]=ed[block-1]+1;
ed[block]=n;
}
for(int i=1; i<=block; i++) {
sort(b+st[i],b+ed[i]+1);
for(int j=st[i];j<=ed[i];j++){
bl[j]=i;
}
}
for(int i=1; i<=n; i++) {
int opt;
scanf("%d",&opt);
int lt,rt,val;
scanf("%d%d%d",<,&rt,&val);
if(opt==0) {
update(lt,rt,val);
} else {
query(lt,rt,val*val);
}
}
return 0;
}
去你的我调不出来/fn
帮我调的都是我老父亲嘤嘤嘤