#include <bits/stdc++.h> using namespace std; #define M 10005 int add[M]; struct set_ren{ int l; int r; }p[M]; int minn[M],maxx[M]; void upget(int rt) { minn[rt]=min(minn[rt*2],minn[rt*2+1]); maxx[rt]=max(maxx[rt*2],maxx[rt*2+1]); } void set_tu(int l,int r,int rt) { if(l==r) { scanf("%d",&minn[rt]); maxx[rt]=minn[rt]; return; } p[rt].l=l;p[rt].r=r; int mid=(l+r)/2; set_tu(l,mid,rt*2); set_tu(mid+1,r,rt*2+1); upget(rt); //ok } void downget(int rt) { if(add[rt]==0) return; add[rt*2]+=add[rt]; add[rt*2+1]+=add[rt]; maxx[rt*2]+=add[rt]; minn[rt*2]+=add[rt]; maxx[rt*2+1]+=add[rt]; minn[rt*2+1]+=add[rt]; } void xiugai(int l,int r,int rt,int c) { if(l<=p[rt].l&&p[rt].r<=r) { add[rt]+=c; maxx[rt]+=c; minn[rt]+=c; return ; } if(add[rt]) downget(rt); //shi na ge qu jian int mid=(p[rt].l+p[rt].r)/2; if(r<=mid) xiugai(l,r,rt*2,c); else if(l>mid) xiugai(l,r,rt*2+1,c); else xiugai(l,mid,rt*2,c),xiugai(mid+1,r,rt*2+1,c); upget(rt); } int max_quary(int l,int r,int rt) { if(l<=p[rt].l&&p[rt].r<=r) { return maxx[rt]; } int ret=-0x3f3f3f; if(add[rt]) downget(rt); int mid=(p[rt].l+p[rt].r)/2; if(r<=mid) ret=max(ret,max_quary(l,r,rt*2)); else if(l>mid) ret=max(ret,max_quary(l,r,rt*2+1)); else return max(ret,max(max_quary(l,mid,rt*2),max_quary(mid+1,r,rt*2+1))); } int min_quary(int l,int r,int rt) { if(l<=p[rt].l&&p[rt].r<=r) { return minn[rt]; } int ret=0x3f3f3f; if(add[rt]) downget(rt); int mid=(p[rt].l+p[rt].r)/2; if(r<=mid) ret=min(ret,min_quary(l,r,rt*2)); else if(l>mid) ret=min(ret,min_quary(l,r,rt*2+1)); else return min(ret,min(min_quary(l,mid,rt*2),min_quary(mid+1,r,rt*2+1))); } int n,m,a,b,c; int main(){ scanf("%d%d",&n,&m); set_tu(1,n,1); for(int i=1;i<=m;i++) { int z; scanf("%d",&z); if(z==1) { scanf("%d%d",&a,&b); printf("%d\n",max_quary(a,b,1)-min_quary(a,b,1)); } else { scanf("%d%d%d",&a,&b,&c); xiugai(a,b,1,c); } } }