Submission #1333214

#TimeUsernameProblemLanguageResultExecution timeMemory
1333214lywoemJust Long Neckties (JOI20_ho_t1)C++20
100 / 100
84 ms16384 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define l(a, b, i) for (ll i = a; i < b; i++)
#define rl(a, b, i) for (ll i = a; i >= b; i--)
#define vpair vector<pair<ll, ll>>
#define inf LLONG_MAX
#define ninf LLONG_MIN

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    ll N, A; cin >> N; vector<pair<ll, ll>> vecA(N + 2, {0, 0}); vector<ll> vecB(N + 1, 0);
    l(1, N + 2, i) {
        cin >> A;
        vecA[i] = {A, i};
    }
    l(1, N + 1, i) cin >> vecB[i];
    sort(vecA.begin() + 1, vecA.end());
    sort(vecB.begin() + 1, vecB.end());

    vector<ll> dif1(N + 1, 0); // dif1[i] = max((vecA[i].first - vecB[i]), 0)
    vector<ll> dif2(N + 1, 0); // dif2[i] = max((vecA[i + 1].first - vecB[i]), 0)

    l(1, N + 1, i) dif1[i] = max((vecA[i].first - vecB[i]), 0LL);
    l(1, N + 1, i) dif2[i] = max((vecA[i + 1].first - vecB[i]), 0LL);

    vector<ll> pre1(N + 1, 0); // prefix max của dif1
    vector<ll> pre2(N + 2, 0); // prefix max của dif2, tính ngược lên :>

    l(1, N + 1, i) pre1[i] = max(pre1[i - 1], dif1[i]);
    rl(N, 1, i) pre2[i] = max(pre2[i + 1], dif2[i]);

    vector<pair<ll, ll>> ans(N + 2, {0, 0});
    ans[N + 1] = {vecA[N + 1].second, *max_element(dif1.begin() + 1, dif1.end())};
    //cout << ans[N + 1].first << ' ' << ans[N + 1].second << "\n";

    rl(N, 1, i) {
        ans[i] = {vecA[i].second, max(pre1[i - 1], pre2[i])};
        //cout << ans[i].first << ' ' << ans[i].second << "\n";
    }

    sort(ans.begin() + 1, ans.end());
    l(1, N + 2, i) cout << ans[i].second << ' ';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...