제출 #629943

#제출 시각아이디문제언어결과실행 시간메모리
629943QwertyPiSnowball (JOI21_ho_t2)C++14
100 / 100
236 ms15516 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

int x[200002];
int ans[200002];
struct Data{
	int tot, l, r;
	Data() = default;
	Data(int _t, int _l, int _r) : tot(_t), l(_l), r(_r){};
	bool operator< (const Data& o) const{
		return tot < o.tot;
	}
	
	void print(){
		cout << tot << ' ' << l << ' ' << r << endl;
	}
};

int32_t main(){
	int n, q;
	cin >> n >> q;
	x[0] = -(1LL << 60);
	for(int i = 1; i <= n; i++){
		cin >> x[i];
	}
	x[n + 1] = 1LL << 60;
	vector<Data> v {{0, 0, 0}};
	int l = 0, r = 0, x0 = 0;
	for(int i = 0; i < q; i++){
		int w; cin >> w;
		x0 += w;
		l = min(l, x0);
		r = max(r, x0);
		v.push_back({r - l, l, r});
	}
	for(int i = 0; i <= n; i++){
		auto ptr = upper_bound(v.begin(), v.end(), Data{x[i + 1] - x[i], 0, 0});
		Data d;
		if(ptr == v.end()){
			d = *prev(ptr);
		}else{
			Data d1 = *prev(ptr), d2 = *ptr;
			int dx = d2.l != d1.l, dy = d2.r != d1.r;
			d = {x[i + 1] - x[i], d1.l - dx * (x[i + 1] - x[i] - d1.tot), d1.r + dy * (x[i + 1] - x[i] - d1.tot)};
		}
		ans[i] += d.r, ans[i + 1] += -d.l;
	}
	for(int i = 1; i <= n; i++){
		cout << ans[i] << ' '; 
	}
	cout << endl; 
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...