#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6 + 6;
inline int read(){
int ret = 0, sgn = 0, ch = getchar();
while(!isdigit(ch)) sgn |= ch == '-', ch = getchar();
while(isdigit(ch)) ret = ret * 10 + ch - '0', ch = getchar();
return sgn ? -ret : ret;
}
ll a[N];
signed main(){
int n = read(), q = read(), i;
for(i = 1; i <= n; i++) a[i] = read();
while(q--){
int op = read(), l = read(), r = read();
if(op == 1){
int x = read();
for(i = l; i <= r; i++) a[i] = x;
}else if(op == 2){
int x = read();
for(i = l; i <= r; i++) a[i] += x;
}else{
ll ans = -1e14;
for(i = l; i <= r; i++)
if(a[i] > ans) ans = a[i];
printf("%lld\n", ans);
}
}
return 0;
}
要不是测试点10文件太大(无法下载),我就AC了