Submission #1331632

#TimeUsernameProblemLanguageResultExecution timeMemory
1331632tkm_algorithmsSnowball (JOI21_ho_t2)C++20
100 / 100
825 ms9808 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
#define int ll
using P = pair<int, int>;
#define all(x) x.begin(), x.end()
#define rep(x,s,e) for (auto x=(s)-((s)>(e));x!=(e)-((s)>(e));((s)<(e)?x++:x--))
#define sz(x) (int)x.size()
const char nl = '\n';
const int mod = 998244353;
const int inf = 2e17+100;

void solve() {
	int n, q; cin >> n >> q;
	vector<int> a(n), b(q);
	rep(i, 0, n)cin >> a[i];
	rep(i, 0, q)cin >> b[i];
	
	vector<int> pmn(q), pmx(q);
	//vector<int> mn(q), mx(q);
	rep(i, 0, q) {
		b[i] = (i?b[i-1]:0)+b[i];
		pmn[i] = max(-b[i],(i?pmn[i-1]:0));
		pmx[i] = max(b[i],(i?pmx[i-1]:0));
		//mn[i] = min(b[i], (i?mn[i-1]:inf));
	}

	vector<int> res(n);
	rep(i, 0, n) {
		{ // cepe
			int l = 0, r = inf;
			if (i)r = a[i]-a[i-1]+1;
			while (r-l>1) {
				int mid = l+r>>1;
				int lb = lower_bound(all(pmn), mid) - pmn.begin();
				bool ok = true;
				if (lb == sz(pmn) || (i && a[i-1]+pmx[lb] > a[i]-mid))ok = false;
				if (ok)l = mid;
				else r = mid;
			}
			res[i] += l;
		}
		{ // saga
			int l = 0, r = inf;
			if (i<n-1)r = a[i+1]-a[i]+1;
			while (r-l>1) {
				int mid = l+r>>1;
				int lb = lower_bound(all(pmx), mid) - pmx.begin();
				bool ok = true;
				if (lb == sz(pmx) || (i<n-1 && a[i+1]-pmn[lb] < a[i]+mid))ok = false;
				if (ok)l = mid;
				else r = mid;
			}
			res[i] += l;
			//if (i == 1)cout << l << nl;
		}
	}
	
	rep(i, 0, n)cout << res[i] << nl;
}

int32_t main() {
	//freopen("out.txt", "r", stdin);
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...