Anonymous__user @ 2022-07-13 11:20:52
#include<bits/stdc++.h>
using namespace std;
long long nn,mm,op,l,r,x,a[1000010],da;
struct shu{
long long ll,rr,Max,bj,bj2;
}tt[4000010];
void jian(long long i,long long zuo,long long you){
tt[i].ll=zuo;
tt[i].rr=you;
tt[i].bj=12349999496383248888;
if(l==r){
tt[i].Max=a[l];
return;
}
jian(i*2,zuo,(zuo+you)/2);
jian(i*2+1,(zuo+you)/2+1,you);
tt[i].Max=max(tt[i*2].Max,tt[i*2+1].Max);
}
void xia(long long i){
if(tt[i].bj==12349999496383248888 && tt[i].bj2==0)
return;
if(tt[i].bj!=12349999496383248888){
tt[i*2].bj=tt[i].bj;
tt[i*2+1].bj=tt[i].bj;
tt[i*2].bj2=tt[i].bj2;
tt[i*2+1].bj2=tt[i].bj2;
tt[i*2].Max=tt[i].bj+tt[i].bj2;
tt[i*2+1].Max=tt[i].bj+tt[i].bj2;
tt[i].bj=12349999496383248888;
tt[i].bj2=0;
}
else{
tt[i*2].bj2+=tt[i].bj2;
tt[i*2+1].bj2+=tt[i].bj2;
tt[i*2].Max+=tt[i].bj2;
tt[i*2+1].Max+=tt[i].bj2;
tt[i].bj2=0;
}
}
void st1(long long i){
if(l<=tt[i].rr && r>=tt[i].ll){
if(l<=tt[i].ll && r>=tt[i].rr){
tt[i].bj=x;
tt[i].bj2=0;
tt[i].Max=x;
return;
}
xia(i);
st1(i*2);
st1(i*2+1);
tt[i].Max=max(tt[i*2].Max,tt[i*2+1].Max);
}
}
void st2(long long i){
if(l<=tt[i].rr && r>=tt[i].ll){
if(l<=tt[i].ll && r>=tt[i].rr){
tt[i].bj2+=x;
tt[i].Max+=x;
return;
}
xia(i);
st2(i*2);
st2(i*2+1);
tt[i].Max=max(tt[i*2].Max,tt[i*2+1].Max);
}
}
void st3(long long i){
if(l<=tt[i].rr && r>=tt[i].ll){
if(l<=tt[i].ll && r>=tt[i].rr){
da=max(da,tt[i].Max);
return;
}
xia(i);
st3(i*2);
st3(i*2+1);
}
}
int main(){
cin>>nn>>mm;
for(int i=1;i<=nn;i++)cin>>a[i];
jian(1,1,nn);
for(int i=1;i<=mm;i++){
cin>>op;
if(op==1){
cin>>l>>r>>x;
st1(1);
}
if(op==2){
cin>>l>>r>>x;
st2(1);
}
if(op==3){
da=-1234476487885688;
cin>>l>>r;
st3(1);
cout<<da<<endl;
}
}
return 0;
}
by irris @ 2022-07-13 11:33:15
把你那个 123 什么玩意后面加个 ll(?)
by WanderingTrader @ 2022-07-13 11:52:57
@sky13968662232 无穷大建议采用16进制,不会出现溢出的问题
比如
long long INF1=0x3f3f3f3f3f3f3f3f;
long long INF2=1e16;
long long INF3=1234567812345678;
(8个3f)
前两个是不会溢出的,但如果像第三个那样直接写数字就会溢出(因为默认是int)