256162026-02-23 17:07:10GeneratrollSzámsorjáték (40 pont)cpp17Accepted 40/40108ms1076 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n, m, k;
	cin >> n >> m >> k;
	vector<ll> v1(n + 1);
	for (int i = 1; i <= n; i++) {
		cin >> v1[i];
	}
	vector<ll> v2(m + 1);
	for (int j = 1; j <= m; j++) {
		cin >> v2[j];
	}
	vector<ll> s1(n + 2, 0);
	for (int i = n; i >= 1; i--) {
		s1[i] = s1[i + 1] + v1[i];
	}
	vector<ll> s2(m + 2, 0);
	for (int j = m; j >= 1; j--) {
		s2[j] = s2[j + 1] + v2[j];
	}
	vector<vector<pair<int, int>>> q(n + 1);
	for (int l = 0; l < k; l++) {
		int i, j;
		cin >> i >> j;
		q[i].push_back({j, l});
	}
	vector<ll> r(k);
	vector<ll> d1(m + 2);
	vector<ll> d2(m + 2);
	d2[m + 1] = 0;
	for (int j = m; j >= 1; j--) {
		d2[j] = v2[j] - d2[j + 1];
	}
	for (int i = n; i >= 1; i--) {
		d1[m + 1] = v1[i] - d2[m + 1];
		for (int j = m; j >= 1; j--) {
			d1[j] = max({v1[i] - d2[j], v2[j] - d1[j + 1], v1[i] + v2[j] - d2[j + 1]});
		}
		for (auto& p : q[i]) {
			int j = p.first;
			int l = p.second;
			r[l] = (d1[j] + s1[i] + s2[j]) / 2;
		}
		d2 = d1;
	}
	for (ll x : r) {
		cout << x << '\n';
	}
	return 0;
}
SubtaskSumTestVerdictTimeMemory
base40/40
1Accepted0/01ms316 KiB
2Accepted0/024ms816 KiB
3Accepted1/11ms316 KiB
4Accepted1/12ms316 KiB
5Accepted1/14ms316 KiB
6Accepted1/14ms316 KiB
7Accepted1/11ms316 KiB
8Accepted1/11ms464 KiB
9Accepted1/11ms316 KiB
10Accepted1/12ms536 KiB
11Accepted1/12ms316 KiB
12Accepted1/12ms316 KiB
13Accepted1/17ms564 KiB
14Accepted1/16ms564 KiB
15Accepted1/14ms504 KiB
16Accepted1/16ms316 KiB
17Accepted2/2105ms812 KiB
18Accepted2/2105ms844 KiB
19Accepted2/2105ms648 KiB
20Accepted2/2108ms1020 KiB
21Accepted2/2108ms1076 KiB
22Accepted2/2108ms1028 KiB
23Accepted3/3108ms1076 KiB
24Accepted3/3108ms1032 KiB
25Accepted4/4108ms1076 KiB
26Accepted4/4108ms1052 KiB