Submission #1190239

#TimeUsernameProblemLanguageResultExecution timeMemory
1190239anmattroiArt Collections (BOI22_art)C++17
35 / 100
90 ms420 KiB
#include "art.h"
#include <bits/stdc++.h>

using namespace std;

void solve(int N) {

    vector<int> a(N);
    iota(a.begin(), a.end(), 1);

    function<void(int, int)> ftw = [&](int L, int R) {
        if (L == R) return;
        if (L + 1 == R) {
            int cr = publish(a);
            swap(a[L], a[R]);
            int nex = publish(a);
            if (nex > cr) swap(a[L], a[R]);
            return;
        }
        int mid = (L + R) >> 1;
        ftw(L, mid);
        ftw(mid+1, R);
        int szL = L, szR = mid+1;

        vector<int> T;
        while (szL <= mid && szR <= R) {
            vector<int> o;
            for (int i = 0; i < L; i++) o.emplace_back(a[i]);
            for (int i : T) o.emplace_back(i);
            int D = o.size();
            o.emplace_back(a[szL]);
            o.emplace_back(a[szR]);

            for (int i = szL+1; i <= mid; i++) o.emplace_back(a[i]);
            for (int i = szR+1; i <= R; i++) o.emplace_back(a[i]);

            for (int i = R+1; i < N; i++) o.emplace_back(a[i]);

            int A = publish(o);
            swap(o[D], o[D+1]);
            int B = publish(o);
            if (A < B) {
                T.emplace_back(a[szL]);
                ++szL;
                swap(o[D], o[D+1]);
            } else {
                T.emplace_back(a[szR]);
                ++szR;
            }
        }
        for (int i = szL; i <= mid; i++) T.emplace_back(a[i]);
        for (int i = szR; i <= R; i++) T.emplace_back(a[i]);

        for (int i = L; i <= R; i++) a[i] = T[i-L];
    };

    ftw(0, N-1);
    answer(a);
}
/*
5
3 1 4 2 5
*/

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...