제출 #677564

#제출 시각아이디문제언어결과실행 시간메모리
677564Nahian9696Just Long Neckties (JOI20_ho_t1)C++17
100 / 100
207 ms23852 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long lli;

#define f0(i,n) for(int32_t i = 0; i <  (n); i++)
#define f1(i,n) for(int32_t i = 1; i <= (n); i++)

#define inp(n) lli n; cin >> n
#define inparr(arr,n) lli arr[n]; f0(t_ind, n) cin >> arr[t_ind]

#define all(x) (x).begin(), (x).end()

int main () {
    inp(n);
    inparr(a, n+1);
    inparr(b, n);

    vector<pair<lli, lli>> arr, brr;
    f0(i, n+1) arr.push_back({a[i], i});
    f0(i, n) brr.push_back({b[i], i});

    sort(all(arr));
    sort(all(brr));

    lli prefmx[n], sufmx[n];
    prefmx[0] = max(arr[0].first-brr[0].first, 0ll);
    sufmx[n-1] = max(arr[n].first-brr[n-1].first, 0ll);

    for (int32_t i = 1; i < n; i++) {
        // prefmx[i] = max(prefmx[i-1], a[i]-b[i]);
        prefmx[i] = max(prefmx[i-1], arr[i].first-brr[i].first);
    }
    for (int32_t i = n-2; i >= 0; i--) {
        // sufmx[i] = max(sufmx[i+1], a[i+1]-b[i]);
        sufmx[i] = max(sufmx[i+1], arr[i+1].first-brr[i].first);
    }
    vector<lli> ans;
    // cout << sufmx[0] << " ";
    ans.push_back(sufmx[0]);
    f1(i, n-1) {
        // cout << max(prefmx[i-1], sufmx[i]) << " ";
        ans.push_back(max(prefmx[i-1], sufmx[i]));
    }
    // cout << prefmx[n-1] << endl;
    ans.push_back(prefmx[n-1]);

    lli ans2[n+1];
    f0(i, n+1) ans2[arr[i].second] = ans[i];

    f0(i, n+1) cout << ans2[i] << " ";
    cout << endl;

    
    return 0;


}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...