import math
import sys
input = sys.stdin.readline
MAXN = 100005
MAXBLOCKS = 400
NEG_INF = -10**18
a = [0] * MAXN
add = [0] * MAXBLOCKS
mx = [NEG_INF] * MAXBLOCKS
block = [0] * MAXN
n = 0
blocksize = 0
def update(l, r, x):
global a, add, mx
blockl = block[l]
blockr = block[r]
if blockl == blockr:
for i in range(l, r + 1):
a[i] += x
mxb = NEG_INF
for i in range((blocksize * (blockl - 1)) + 1, min(n, blocksize * blockl) + 1):
a[i] += add[blockl]
mxb = max(mxb, a[i])
mx[blockl] = mxb
add[blockl] = 0
return
if l % blocksize != 1:
last = min(n, blocksize * blockl)
for i in range(l, last + 1):
a[i] += x
mxb = NEG_INF
for i in range((blocksize * (blockl - 1)) + 1, last + 1):
a[i] += add[blockl]
mxb = max(mxb, a[i])
mx[blockl] = mxb
add[blockl] = 0
blockl += 1
if r % blocksize != 0:
first = blocksize * (blockr - 1) + 1
for i in range(r, first - 1, -1):
a[i] += x
mxb = NEG_INF
for i in range(min(n, blocksize * blockr), first - 1, -1):
a[i] += add[blockr]
mxb = max(mxb, a[i])
mx[blockr] = mxb
add[blockr] = 0
blockr -= 1
for i in range(blockl, blockr + 1):
add[i] += x
def query(l, r):
ans = NEG_INF
blockl = block[l]
blockr = block[r]
if blockl == blockr:
for i in range(l, r + 1):
ans = max(ans, a[i] + add[blockl])
return ans
if l % blocksize != 1:
last = min(n, blocksize * blockl)
for i in range(l, last + 1):
ans = max(ans, a[i] + add[blockl])
blockl += 1
if r % blocksize != 0:
first = blocksize * (blockr - 1) + 1
for i in range(r, first - 1, -1):
ans = max(ans, a[i] + add[blockr])
blockr -= 1
for i in range(blockl, blockr + 1):
ans = max(ans, mx[i] + add[i])
return ans
def solve():
global n, blocksize
t = int(input())
for _ in range(t):
n = int(input())
blocksize = int(math.sqrt(n))
arr = list(map(int, input().split()))
for i in range(1, n + 1):
a[i] = arr[i - 1]
block[i] = (i + blocksize - 1) // blocksize
for i in range(1, MAXBLOCKS):
add[i] = 0
mx[i] = NEG_INF
for i in range(1, n + 1, blocksize):
mxv = a[i]
for j in range(i, min(n, i + blocksize - 1) + 1):
mxv = max(mxv, a[j])
mx[block[i]] = mxv
q = int(input())
for _ in range(q):
args = list(map(int, input().split()))
if args[0] == 1:
_, l, r, x = args
update(l, r, x)
else:
_, l, r = args
print(query(l, r))
if __name__ == "__main__":
solve()