Пример #1
0
int main() {
	optimize_io
	lli x;
	int x1, y1, x2, y2;
	cin >> T;

	FOR(int, t, 0, T) {
		cin >> N;
		A.clear();

		FOR(int, i, 0, N) {
			cin >> x;
			PB(A, x);
		}

		init();
		build(0, 0, N - 1);

		cin >> M;

		FOR(int, i, 0, M) {
			cin >> x1 >> y1 >> x2 >> y2;
			
			if (y1 < x2) {
				cout << q(x1, y1).suffixSum + q(y1 + 1, x2 - 1).sum + q(x2, y2).prefixSum << '\n';
			} else {
				cout << max(q(x2, y1).maxSum,
							max(q(x1, x2 - 1).suffixSum + q(x2, y2).prefixSum,
								q(x1, y1).suffixSum + q(y1 + 1, y2).prefixSum
							)
						) << '\n';
			}
		}
	}
	return 0;
}