256162026-02-23 17:07:10GeneratrollSzámsorjáték (40 pont)cpp17Elfogadva 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base40/40
1Elfogadva0/01ms316 KiB
2Elfogadva0/024ms816 KiB
3Elfogadva1/11ms316 KiB
4Elfogadva1/12ms316 KiB
5Elfogadva1/14ms316 KiB
6Elfogadva1/14ms316 KiB
7Elfogadva1/11ms316 KiB
8Elfogadva1/11ms464 KiB
9Elfogadva1/11ms316 KiB
10Elfogadva1/12ms536 KiB
11Elfogadva1/12ms316 KiB
12Elfogadva1/12ms316 KiB
13Elfogadva1/17ms564 KiB
14Elfogadva1/16ms564 KiB
15Elfogadva1/14ms504 KiB
16Elfogadva1/16ms316 KiB
17Elfogadva2/2105ms812 KiB
18Elfogadva2/2105ms844 KiB
19Elfogadva2/2105ms648 KiB
20Elfogadva2/2108ms1020 KiB
21Elfogadva2/2108ms1076 KiB
22Elfogadva2/2108ms1028 KiB
23Elfogadva3/3108ms1076 KiB
24Elfogadva3/3108ms1032 KiB
25Elfogadva4/4108ms1076 KiB
26Elfogadva4/4108ms1052 KiB