Submission #762988

#TimeUsernameProblemLanguageResultExecution timeMemory
762988vjudge1Just Long Neckties (JOI20_ho_t1)C++17
100 / 100
113 ms7460 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN = 2e5 + 10; int n; pair<int, int> a[MAXN]; int b[MAXN], tree[4*MAXN], ans[MAXN]; void build(int id, int l, int r){ if(l == r){ tree[id] = max(a[l].first - b[l], 0); return; } int mid = (l + r) / 2; build(id*2, l, mid); build(id*2 + 1, mid + 1, r); tree[id] = max(tree[id*2], tree[id*2 + 1]); } void update(int id, int l, int r, int ind){ if(l > ind || r < ind) return; if(l == r){ tree[id] = max(a[l+1].first - b[l], 0); return; } int mid = (l + r) / 2; update(id*2, l, mid, ind); update(id*2 + 1, mid + 1, r, ind); tree[id] = max(tree[id*2], tree[id*2 + 1]); } int get(int id, int l, int r, int u, int v){ if(l > v || r < u) return 0; if(u <= l && r <= v) return tree[id]; int mid = (l + r) / 2; return max(get(id*2, l, mid, u, v), get(id*2 + 1, mid + 1, r, u, v)); } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; for(int i = 1; i <= n + 1; i++){ cin >> a[i].first; a[i].second = i; } sort(a + 1, a + n + 2); for(int i = 1; i <= n; i++){ cin >> b[i]; } sort(b + 1, b + n + 1); build(1, 1, n); ans[a[n+1].second] = get(1, 1, n, 1, n); for(int i = n; i >= 1; i--){ update(1, 1, n, i); ans[a[i].second] = get(1, 1, n, 1, n); } for(int i = 1; i <= n + 1; i++){ cout << ans[i] << ' '; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...