Submission #51890594


Source Code Expand

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

constexpr ll inf = 1ll << 60;

int n;
vector<pair<ll, ll>> x; // x : (a, b)

void read() {
    cin >> n;
    x.resize(n);
    for (auto &[a, b] : x) {
        cin >> a >> b;
    }
    sort(x.begin(), x.end(), [&](const auto &a, const auto &b) {
        return a.second < b.second;
    });
}

template <class F>
vector<ll> monotone_maxima(F &f, int h, int w) {
    vector<ll> ret(h);
    auto sol = [&](auto &&self, const int l_i, const int r_i, const int l_j, const int r_j) -> void {
        const int m_i = (l_i + r_i) / 2;
        int max_j = l_j;
        ll max_val = -inf;
        for (int j = l_j; j <= r_j; ++j) {
            const ll v = f(m_i, j);
            if (v > max_val) {
                max_j = j;
                max_val = v;
            }
        }
        ret[m_i] = max_val;

        if (l_i <= m_i - 1) {
            self(self, l_i, m_i - 1, l_j, max_j);
        }
        if (m_i + 1 <= r_i) {
            self(self, m_i + 1, r_i, max_j, r_j);
        }
    };
    sol(sol, 0, h - 1, 0, w - 1);
    return ret;
}

vector<ll> max_plus_convolution(const vector<ll> &a, const vector<ll> &b) {
    const int n = (int)a.size(), m = (int)b.size();
    auto f = [&](int i, int j) {
        if (i < j or i - j >= m) {
            return -inf;
        }
        return a[j] + b[i - j];
    };

    return monotone_maxima(f, n + m - 1, n);
}

vector<ll> sol(const int l, const int r) {
    if (r - l == 1) {
        const vector<ll> ret = {-inf, x[l].first - x[l].second};
        return ret;
    }
    const int m = (l + r) / 2;
    const auto res_l = sol(l, m);
    const auto res_r = sol(m, r);

    vector<ll> sorted_l(m - l);
    for (int i = l; i < m; ++i) {
        sorted_l[i - l] = x[i].first;
    }
    sort(sorted_l.begin(), sorted_l.end(), greater());
    for (int i = 1; i < m - l; ++i) {
        sorted_l[i] += sorted_l[i - 1];
    }
    sorted_l.insert(sorted_l.begin(), -inf);

    auto res = max_plus_convolution(res_r, sorted_l);

    for (int i = 0; i < (int)res_l.size(); ++i) {
        res[i] = max(res[i], res_l[i]);
    }
    for (int i = 0; i < (int)res_r.size(); ++i) {
        res[i] = max(res[i], res_r[i]);
    }
    return res;
}

void process() {
    auto ans = sol(0, n);
    for (int i = 1; i <= n; ++i) {
        cout << ans[i] << endl;
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    read();
    process();
}

Submission Info

Submission Time
Task G - Max (Sum - Max)
User Cyanmond
Language C++ 20 (gcc 12.2)
Score 650
Code Size 2564 Byte
Status AC
Exec Time 363 ms
Memory 10952 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 650 / 650
Status
AC × 3
AC × 60
Set Name Test Cases
Sample example0.txt, example1.txt, example2.txt
All example0.txt, example1.txt, example2.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt
Case Name Status Exec Time Memory
example0.txt AC 1 ms 3564 KiB
example1.txt AC 1 ms 3592 KiB
example2.txt AC 1 ms 3408 KiB
test_00.txt AC 86 ms 5204 KiB
test_01.txt AC 101 ms 5232 KiB
test_02.txt AC 323 ms 9640 KiB
test_03.txt AC 167 ms 6956 KiB
test_04.txt AC 62 ms 4560 KiB
test_05.txt AC 355 ms 10732 KiB
test_06.txt AC 356 ms 10784 KiB
test_07.txt AC 358 ms 10852 KiB
test_08.txt AC 356 ms 10736 KiB
test_09.txt AC 357 ms 10780 KiB
test_10.txt AC 358 ms 10848 KiB
test_11.txt AC 357 ms 10760 KiB
test_12.txt AC 354 ms 10904 KiB
test_13.txt AC 358 ms 10764 KiB
test_14.txt AC 357 ms 10808 KiB
test_15.txt AC 363 ms 10840 KiB
test_16.txt AC 362 ms 10704 KiB
test_17.txt AC 363 ms 10952 KiB
test_18.txt AC 363 ms 10900 KiB
test_19.txt AC 362 ms 10832 KiB
test_20.txt AC 331 ms 10756 KiB
test_21.txt AC 329 ms 10808 KiB
test_22.txt AC 331 ms 10812 KiB
test_23.txt AC 331 ms 10848 KiB
test_24.txt AC 329 ms 10784 KiB
test_25.txt AC 278 ms 10780 KiB
test_26.txt AC 276 ms 10952 KiB
test_27.txt AC 275 ms 10760 KiB
test_28.txt AC 274 ms 10952 KiB
test_29.txt AC 275 ms 10852 KiB
test_30.txt AC 277 ms 10904 KiB
test_31.txt AC 274 ms 10808 KiB
test_32.txt AC 277 ms 10776 KiB
test_33.txt AC 275 ms 10844 KiB
test_34.txt AC 275 ms 10772 KiB
test_35.txt AC 351 ms 10808 KiB
test_36.txt AC 352 ms 10832 KiB
test_37.txt AC 353 ms 10832 KiB
test_38.txt AC 352 ms 10732 KiB
test_39.txt AC 353 ms 10776 KiB
test_40.txt AC 351 ms 10772 KiB
test_41.txt AC 352 ms 10872 KiB
test_42.txt AC 353 ms 10760 KiB
test_43.txt AC 351 ms 10948 KiB
test_44.txt AC 352 ms 10808 KiB
test_45.txt AC 354 ms 10880 KiB
test_46.txt AC 352 ms 10744 KiB
test_47.txt AC 353 ms 10776 KiB
test_48.txt AC 352 ms 10852 KiB
test_49.txt AC 357 ms 10808 KiB
test_50.txt AC 357 ms 10752 KiB
test_51.txt AC 354 ms 10752 KiB
test_52.txt AC 354 ms 10760 KiB
test_53.txt AC 351 ms 10776 KiB
test_54.txt AC 354 ms 10820 KiB
test_55.txt AC 1 ms 3520 KiB
test_56.txt AC 253 ms 10812 KiB