RT,区间加+区间查询小于x的数的个数,数组大小没问题,为何RE?
#include<bits/stdc++.h>
#define PII pair<int,int>
#define DB double
#define LL long long
#define int long long
//#define int __int128
//const int mod=1e9+7;
//const int mod=998244353;
const LL inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
namespace FastIO{
inline int read(int mod){
int x=0,f=1;char ch=getchar();
if(mod==0){while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}}
else{while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x*10%mod+ch-48)%mod;ch=getchar();}}
return x*f;}
inline char cread(){char x;while(x==0||x==' '||x=='\n'||x=='\r')x=getchar();return x;}
inline void write(int x){if(x<0)putchar('-'),x=-x;if(x==0)return;write(x/10),putchar(x%10+'0');}
}
using namespace FastIO;
using namespace std;
int a[50005];
vector<PII>val[235];
int add[235],pos[235],lf[235],rg[235];
int pts=230,cnt=0;
signed main(){
int n=read(0);
for(int i=1;i<=n;++i)
a[i]=read(0);
for(int i=1;i+pts-1<=n;i+=pts){
++cnt,add[cnt]=0,lf[cnt]=i,rg[cnt]=i+pts-1;
for(int j=lf[cnt];j<=rg[cnt];++j)
pos[j]=cnt,val[cnt].push_back({a[j],j});
sort(val[cnt].begin(),val[cnt].end());
}
++cnt,add[cnt]=0,lf[cnt]=(n/pts)*pts+1,rg[cnt]=n;
for(int j=lf[cnt];j<=rg[cnt];++j)
pos[j]=cnt,val[cnt].push_back({a[j],j});
sort(val[cnt].begin(),val[cnt].end());
for(int qry=1;qry<=n;++qry){
int op=read(0),l=read(0),r=read(0),c=read(0);
if(op==0){
for(int i=pos[l]+1;i<=pos[r]-1;++i)add[i]+=c;
for(PII &pii:val[pos[l]]){
pii.first+=add[pos[l]];
if(l<=pii.second&&pii.second<=r)pii.first+=c;
}
add[pos[l]]=0,sort(val[pos[l]].begin(),val[pos[l]].end());
if(pos[l]==pos[r])continue;
for(PII &pii:val[pos[r]]){
pii.first+=add[pos[r]];
if(l<=pii.second&&pii.second<=r)pii.first+=c;
}
add[pos[r]]=0,sort(val[pos[r]].begin(),val[pos[r]].end());
}
if(op==1){
int ans=0;
for(int i=pos[l]+1;i<=pos[r]-1;++i){
auto it=lower_bound(val[i].begin(),val[i].end(),make_pair(c*c-add[i],-inf));
ans+=it-val[i].begin();
}
for(PII &pii:val[pos[l]]){
pii.first+=add[pos[l]];
if(l<=pii.second&&pii.second<=r&&pii.first<=c*c)++ans;
}
add[pos[l]]=0,sort(val[pos[l]].begin(),val[pos[l]].end());
if(pos[l]!=pos[r]){
for(PII &pii:val[pos[r]]){
pii.first+=add[pos[r]];
if(l<=pii.second&&pii.second<=r&&pii.first<=c*c)++ans;
}
add[pos[r]]=0,sort(val[pos[r]].begin(),val[pos[r]].end());
}
printf("%lld\n",ans);
}
}
return 0;
}