最大子段和
题号:NC52957
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

给一个长为n的序列,有m次查询操作
查询操作形如 l r L R,表示将序列中值在[L,R]内的位置保留不变,其他的位置变成0时,序列中[l,r]区间内的最大子段和,这个子段可以是空的

输入描述:

第一行两个数n,m
第二行n个数表示这个序列
之后m行,每行四个数l r L R表示一次查询操作
n,m<=1e5,序列中所有数的绝对值<=1e9

输出描述:

输出m行,每行一个数表示答案
示例1

输入

复制
6 5
-1 1 -4 5 -1 4
1 1 4 5
1 1 4 514
2 3 3 3
1 6 -1 5
2 5 2 5

输出

复制
0
0
0
9
5

说明

第四组查询中,值域限制是[-1,5],序列为-1 1 0 5 -1 4,区间[1,6]的最大子段为[2,6],和为9

第五组查询中,值域限制是[2,5],序列为0 0 0 5 0 4,区间[2,5]的最大子段为[4,4](并列),和为5