제출 #556089

#제출 시각아이디문제언어결과실행 시간메모리
556089alextodoranJust Long Neckties (JOI20_ho_t1)C++17
100 / 100
261 ms19404 KiB
/**
 ____ ____ ____ ____ ____
||a |||t |||o |||d |||o ||
||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|

**/

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N_MAX = 200000;

int N;
int A[N_MAX + 2];
int B[N_MAX + 2];

int p[N_MAX + 2];
int id[N_MAX + 2];

int answer[N_MAX + 2];

multiset <int> s;

int main () {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin >> N;
    for (int i = 1; i <= N + 1; i++) {
        cin >> A[i];
    }
    for (int i = 1; i <= N; i++) {
        cin >> B[i];
    }

    iota(p + 1, p + (N + 1) + 1, 1);
    sort(p + 1, p + (N + 1) + 1, [&] (const int &i, const int &j) {
        return A[i] < A[j];
    });
    sort(B + 1, B + N + 1);

    for (int i = 1; i <= (N + 1); i++) {
        id[p[i]] = i;
    }
    sort(A + 1, A + (N + 1) + 1);

    for (int i = 1; i <= N; i++) {
        s.insert(max(0, A[i + 1] - B[i]));
    }
    for (int i = 1; i <= N + 1; i++) {
        answer[i] = *s.rbegin();
        if (i <= N) {
            s.erase(s.find(max(0, A[i + 1] - B[i])));
            s.insert(max(0, A[i] - B[i]));
        }
    }
    for (int i = 1; i <= N + 1; i++) {
        cout << answer[id[i]] << " ";
    }
    cout << "\n";

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...