#include #include #include #include #include #include using namespace std; #define debug(x) cerr<<#x<<' '<void read(T&x){ short f=1;x=0; char ch=pia(); while(!isdigit(ch)){ if(ch=='-')f=-1; ch=pia(); }while(isdigit(ch)){ x=(x<<1)+(x<<3)+(ch^48); ch=pia(); }x*=f; } templatevoid write(T x){ if(x<0)putchar('-'),x=-x; if(x>=10)write(x/10); putchar(x%10+48); } #define int long long #define maxn 100010 #define DEBUG 0 int n,m,a[maxn]; int tag[maxn]; vectoru[5000]; int opt,l,r,k; int L[maxn],R[maxn],pos[maxn]; int blo,tot; int mn=LLONG_MAX,mx=LLONG_MIN; int calc(int l,int r,int val){ int p=pos[l],q=pos[r]; int res=0; if(DEBUG)p=q=0; if(p==q){ for(int i=l;i<=r;i++) res+=a[i]+tag[p]<=val; }else{ for(int i=l;i<=R[p];i++) res+=a[i]+tag[p]<=val; for(int i=L[q];i<=r;i++) res+=a[i]+tag[q]<=val; for(int i=p+1;i<=q-1;i++){ if(1){ if(*u[i].begin()>val-tag[i]); else if(*--u[i].end()<=val-tag[i])res+=(int)u[i].size(); else res+=upper_bound(u[i].begin(),u[i].end(),val-tag[i])-u[i].begin(); }else{ res+=upper_bound(u[i].begin(),u[i].end(),val-tag[i])-u[i].begin(); } } } return res; } int ask(int l,int r,int k){ int lb=mn,rb=mx,mid; while(lb<=rb){ mid=(lb+rb)>>1; if(calc(l,r,mid)