Submission #1324053

#TimeUsernameProblemLanguageResultExecution timeMemory
1324053sh_qaxxorov_571Just Long Neckties (JOI20_ho_t1)C++20
100 / 100
70 ms7108 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

/**
 * JOI 2020 Final - Neckties
 * Vaqt murakkabligi: O(N log N) - tartiblash tufayli
 * Xotira murakkabligi: O(N)
 */

struct Tie {
    int val, id;
};

bool compareTies(const Tie& a, const Tie& b) {
    return a.val < b.val;
}

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

    int N;
    cin >> N;

    vector<Tie> A(N + 1);
    for (int i = 0; i < N + 1; i++) {
        cin >> A[i].val;
        A[i].id = i;
    }

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

    // Tartiblaymiz
    sort(A.begin(), A.end(), compareTies);
    sort(B.begin(), B.end());

    // pref[i] -> A[0...i-1] va B[0...i-1] juftligidan maksimal g'alatilik
    vector<int> pref(N + 1, 0);
    for (int i = 0; i < N; i++) {
        pref[i + 1] = max(pref[i], max(0, A[i].val - B[i]));
    }

    // suff[i] -> A[i+1...N] va B[i...N-1] juftligidan maksimal g'alatilik
    vector<int> suff(N + 1, 0);
    for (int i = N - 1; i >= 0; i--) {
        suff[i] = max(suff[i + 1], max(0, A[i + 1].val - B[i]));
    }

    // Asl tartibdagi javoblarni saqlash uchun
    vector<int> results(N + 1);
    for (int i = 0; i <= N; i++) {
        // Agar A[i] (tartiblangan massivdagi i-chi element) olib tashlansa
        results[A[i].id] = max(pref[i], suff[i]);
    }

    for (int i = 0; i <= N; i++) {
        cout << results[i] << (i == N ? "" : " ");
    }
    cout << endl;

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