제출 #1282276

#제출 시각아이디문제언어결과실행 시간메모리
1282276kaiboySnowball (JOI21_ho_t2)C++20
100 / 100
62 ms9976 KiB
#include <algorithm>
#include <iostream>

using namespace std;

const int N = 200000;
const int M = 200000;

long long xx[N], dd[M], ll[M], rr[M], ss[N];

int main() {
	ios_base::sync_with_stdio(false), cin.tie(NULL);
	int n, m; cin >> n >> m;
	for (int i = 0; i < n; i++)
		cin >> xx[i];
	for (int h = 0; h < m; h++)
		cin >> dd[h];
	long long x = 0, l = 0, r = 0;
	for (int h = 0; h < m; h++) {
		x += dd[h];
		ll[h] = l = min(l, x);
		rr[h] = r = max(r, x);
	}
	ss[0] -= ll[m - 1];
	ss[n - 1] += rr[m - 1];
	for (int i = 0; i + 1 < n; i++) {
		long long d = xx[i + 1] - xx[i];
		int lower = -1, upper = m;
		while (upper - lower > 1) {
			int h = lower + upper >> 1;
			if (rr[h] - ll[h] <= d)
				lower = h;
			else
				upper = h;
		}
		int h = lower;
		if (h >= 0) {
			ss[i] += rr[h];
			ss[i + 1] -= ll[h];
		}
		if (h + 1 < m)
			ss[i + (dd[h + 1] < 0)] += d - (rr[h] - ll[h]);
	}
	for (int i = 0; i < n; i++)
		cout << ss[i] << '\n';
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...