rt(
#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
//#define int long long
#define max(n,m) (n>m?n:m)
#define min(n,m) (n<m?n:m)
#define register register int
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
using namespace std;
const int inf=1e9;
char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf;
inline int read(){
int res=0,fs=1; char c=getchar();
while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
while(c>='0' && c<='9')res=res*10+(c^48),c=getchar();
return res*fs;
// int x;
// cin>>x;
// return x;
}
void print(int x){
if(x<0) { putchar('-'); x=-x;}
if(x>9) print(x/10);
putchar(x%10+'0');
}
long long lastans=0;
int S;
long long lazy[1005];
int n,cnt,m,a[500005],ans,tmp,l,r,k,z,x[500005],y[500005],id[500005],mx[1005],mn[1005];
long long v[1005];
inline void update(int l,int r,int k){
int ll=id[l],rr=id[r];
if(ll==rr){
if(mx[ll]-lazy[ll]<=k){
return ;
}
for(register i=l;i<=r;i++){
if(a[i]-lazy[ll]>k) a[i]-=k;
}
mx[ll]=0,mn[ll]=INF,v[ll]=0;
for(register i=x[ll];i<=y[ll];i++){
a[i]-=lazy[ll];
mx[ll]=max(mx[ll],a[i]);
mn[ll]=min(mn[ll],a[i]);
v[ll]+=a[i];
}
lazy[ll]=0;
return ;
}
for(register i=l;i<=y[ll];i++){
if(a[i]-lazy[ll]>k) a[i]-=k;
}
mx[ll]=0,mn[ll]=INF,v[ll]=0;
for(register i=x[ll];i<=y[ll];i++){
a[i]-=lazy[ll];
mx[ll]=max(mx[ll],a[i]);
mn[ll]=min(mn[ll],a[i]);
v[ll]+=a[i];
}
lazy[ll]=0;
for(register i=x[rr];i<=r;i++){
if(a[i]-lazy[rr]>k) a[i]-=k;
}
mx[rr]=0,mn[rr]=INF,v[rr]=0;
for(register i=x[rr];i<=y[rr];i++){
a[i]-=lazy[rr];
mx[rr]=max(mx[rr],a[i]);
mn[rr]=min(mn[rr],a[i]);
v[rr]+=a[i];
}
lazy[rr]=0;
for(int i=ll+1;i<rr;i++){
if(mx[i]-lazy[i]<=k){
continue;
}
if(mn[i]-lazy[i]>k){
lazy[i]+=k;
continue;
}
for(register j=x[i];j<=y[i];j++){
if(a[j]-lazy[i]>k) a[j]-=lazy[i]+k;
else a[j]-=lazy[i];
}
mx[i]=0,mn[i]=INF,v[i]=0;
for(register j=x[i];j<=y[i];j++){
mx[i]=max(mx[i],a[j]);
mn[i]=min(mn[i],a[j]);
v[i]+=a[j];
}
lazy[i]=0;
}
}
inline void query(int l,int r){
int ll=id[l],rr=id[r];
int mxr=0,mnr=INF;
long long ans=0;
if(ll==rr){
for(register i=l;i<=r;i++){
mxr=max(mxr,a[i]-lazy[ll]);
mnr=min(mnr,a[i]-lazy[ll]);
ans+=a[i]-lazy[ll];
}
cout<<ans<<' '<<mnr<<' '<<mxr<<'\n';
lastans=ans%1048576;
return ;
}
for(register i=l;i<=y[ll];i++) mxr=max(mxr,a[i]-lazy[ll]),mnr=min(mnr,a[i]-lazy[ll]),ans+=a[i]-lazy[ll];
for(register i=x[rr];i<=r;i++) mxr=max(mxr,a[i]-lazy[rr]),mnr=min(mnr,a[i]-lazy[rr]),ans+=a[i]-lazy[rr];
for(register i=ll+1;i<rr;i++){
mxr=max(mxr,mx[i]-lazy[i]);
mnr=min(mnr,mn[i]-lazy[i]);
ans+=v[i]-lazy[i]*(y[i]-x[i]+1);
}
cout<<ans<<' '<<mnr<<' '<<mxr<<'\n';
lastans=ans%1048576;
return ;
}
signed main() {
cin>>n>>m;
for(int i=1;i<=n;i++) a[i]=read();
S=sqrt(n);
for(int i=1;i<=S;i++){
x[i]=(i-1)*S+1,y[i]=min(i*S,n);
}
if(x[S]<n) S++,x[S]=y[S-1]+1,y[S]=n;
for(int i=1;i<=S;i++){
mn[i]=INF;
for(int j=x[i];j<=y[i];j++){
id[j]=i;
mn[i]=min(mn[i],a[j]);
mx[i]=max(mx[i],a[j]);
v[i]+=a[j];
}
}
while(m--){
int op=read();
if(op==1){
int l=read()^lastans,r=read()^lastans,x=read()^lastans;
update(l,r,x);
}else{
int l=read()^lastans,r=read()^lastans;
query(l,r);
}
}
return 0;
}
或者谁能给个超级快读啊((((thx(((((((