Submission #18402693


Source Code Expand

#include <atcoder/segtree>
#include <iostream>
#include <vector>
#include <queue>

template <class T>
using MinHeap = std::priority_queue<T, std::vector<T>, std::greater<T>>;

using namespace std;

struct Data {
    int val, idx;
    explicit Data(int val, int idx) : val(val), idx(idx) {}

    static Data op(Data a, Data b) { return a.val <= b.val ? a : b; }
    static Data e() { return Data(1 << 30, -1); }
};

void solve() {
    int n;
    cin >> n;

    atcoder::segtree<Data, Data::op, Data::e> eseg(n), oseg(n);
    for (int i = 0; i < n; ++i) {
        int p;
        cin >> p;
        (i % 2 == 0 ? eseg : oseg).set(i, Data(p, i));
    }

    vector<int> ans;

    MinHeap<tuple<int, int, int>> heap;
    // val, [l, r)

  	// 区間[l, r)を(空でなければ)最小値と共に追加
    auto push = [&](int l, int r) {
        if (r <= l) return;
        auto d = (l % 2 == 0 ? eseg : oseg).prod(l, r);
        heap.emplace(d.val, l, r);
    };

    push(0, n);
    while (!heap.empty()) {
        auto [v, l, r] = heap.top();
        heap.pop();

        auto x = (l % 2 == 0 ? eseg : oseg).prod(l, r);
        auto lr = x.idx;
        ans.push_back(x.val);

        auto y = (l % 2 == 0 ? oseg : eseg).prod(lr, r);
        auto rl = y.idx;
        ans.push_back(y.val);

        push(l, lr);
        push(lr + 1, rl);
        push(rl + 1, r);
    }

    for (auto p : ans) cout << p << " ";
    cout << "\n";
}

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

    solve();

    return 0;
}

Submission Info

Submission Time
Task E - Young Maids
User Tiramister
Language C++ (GCC 9.2.1)
Score 800
Code Size 1608 Byte
Status AC
Exec Time 90 ms
Memory 13784 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 800 / 800
Status
AC × 3
AC × 23
Set Name Test Cases
Sample 0_00.txt, 0_01.txt, 0_02.txt
All 0_00.txt, 0_01.txt, 0_02.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt
Case Name Status Exec Time Memory
0_00.txt AC 5 ms 3472 KiB
0_01.txt AC 2 ms 3544 KiB
0_02.txt AC 1 ms 3596 KiB
1_00.txt AC 2 ms 3536 KiB
1_01.txt AC 2 ms 3548 KiB
1_02.txt AC 87 ms 13064 KiB
1_03.txt AC 89 ms 13076 KiB
1_04.txt AC 89 ms 13244 KiB
1_05.txt AC 89 ms 13536 KiB
1_06.txt AC 89 ms 13604 KiB
1_07.txt AC 87 ms 13660 KiB
1_08.txt AC 90 ms 13540 KiB
1_09.txt AC 85 ms 13124 KiB
1_10.txt AC 90 ms 13124 KiB
1_11.txt AC 84 ms 13212 KiB
1_12.txt AC 89 ms 13660 KiB
1_13.txt AC 89 ms 13660 KiB
1_14.txt AC 89 ms 13776 KiB
1_15.txt AC 90 ms 13600 KiB
1_16.txt AC 89 ms 13580 KiB
1_17.txt AC 87 ms 13752 KiB
1_18.txt AC 89 ms 13772 KiB
1_19.txt AC 88 ms 13784 KiB