Submission #203198

#TimeUsernameProblemLanguageResultExecution timeMemory
203198jovan_bJust Long Neckties (JOI20_ho_t1)C++17
100 / 100
237 ms9592 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;

pair <int, int> a[200005];
int b[200005];
int res[200005];
struct str{
    int val, lazy;
} seg[1000005];

void propagate(int node, int l, int r){
    seg[node].val = max(seg[node].val, seg[node].lazy);
    if(l == r) return;
    seg[node*2].lazy = max(seg[node*2].lazy, seg[node].lazy);
    seg[node*2+1].lazy = max(seg[node*2+1].lazy, seg[node].lazy);
}

void upd(int node, int l, int r, int tl, int tr, int val){
    propagate(node, l, r);
    if(tl > r || l > tr) return;
    if(tl <= l && r <= tr){
        seg[node].lazy = max(seg[node].lazy, val);
        propagate(node, l, r);
        return;
    }
    int mid = (l+r)/2;
    upd(node*2, l, mid, tl, tr, val);
    upd(node*2+1, mid+1, r, tl, tr, val);
}

int getval(int node, int l, int r, int x){
    propagate(node, l, r);
    if(l == r) return seg[node].val;
    int mid = (l+r)/2;
    if(x <= mid) return getval(node*2, l, mid, x);
    return getval(node*2+1, mid+1, r, x);
}

int main(){
    ios_base::sync_with_stdio(false), cin.tie(0);
    cout.precision(10);
    cout << fixed;

	int n;
	cin >> n;
	for(int i=1; i<=n+1; i++){
        cin >> a[i].first;
        a[i].second = i;
	}
	for(int i=1; i<=n; i++) cin >> b[i];
	sort(a+1, a+1+n+1);
	sort(b+1, b+1+n);
	for(int i=1; i<=n; i++){\
        upd(1, 1, n+1, 1, i, max(0, a[i+1].first-b[i]));
        upd(1, 1, n+1, i+1, n+1, max(0, a[i].first-b[i]));
	}
	for(int i=1; i<=n+1; i++){
        res[a[i].second] = getval(1, 1, n+1, i);
	}
	for(int i=1; i<=n+1; i++) cout << res[i] << " ";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...