Submission #963808

#TimeUsernameProblemLanguageResultExecution timeMemory
963808RaresFelixJust Long Neckties (JOI20_ho_t1)C++17
100 / 100
84 ms10908 KiB
#include <bits/stdc++.h>
//#pragma GCC optimize("O3")
//#pragma GCC target("avx,avx2,fma")

#define sz(x) int((x).size())
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()

using namespace std;
using ll = long long;
using ld = long double;  // or double, if TL is tight
using str = string; 
using ii = pair<int, int>;
using pl = pair<ll, ll>;
using vi = vector<int>;
using vll = vector<ll>;


int main() {
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int n;
    cin >> n;
    vi B(n);
    vector<pair<int, int> > A(n + 1);
    for(int i = 0; i <= n; ++i) {
        cin >> A[i].first;
        A[i].second = i;
    }
    for(int i = 0; i < n; ++i) {
        cin >> B[i];
    }
    sort(all(A));
    sort(all(B));
    vi DP1(n), DP2(n);
    for(int i = 0; i < n; ++i) {
        DP1[i] = max(0, -B[i] + A[i].first);
        if(i) DP1[i] = max(DP1[i - 1], DP1[i]);
    }
    for(int i = n - 1; i >= 0; --i) {
        DP2[i] = max(0, -B[i] + A[i + 1].first);
        if(i + 1 < n) DP2[i] = max(DP2[i + 1], DP2[i]);
    }
    vi Re(n + 1, 0);
    for(int i = 0; i <= n; ++i) {
        int v = 0;
        if(i) v = DP1[i - 1];
        if(i < n) v = max(v, DP2[i]);
        Re[A[i].second] = v;
    }
    for(auto it : Re)
        cout << it << " ";
    cout << "\n";

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