제출 #1246390

#제출 시각아이디문제언어결과실행 시간메모리
1246390adam17Art Collections (BOI22_art)C++20
50 / 100
383 ms452 KiB
#include "art.h"
// #include <algorithm>
#include <iostream>
using namespace std;

int NN;
vector<int> X;
int def;
// int odsazeni;

bool compare(int a, int b) {
    vector<int> V(NN);
    for (int i = 0; i < NN; i++) {
        V[i] = i + 1;
    }
    V[a - 1] = b;
    V[b - 1] = a;
    int x = publish(V);
    return x > def;
}

void sort(int i, int j) {
    // for (int i = 0; i < odsazeni; i++) cout << "  "; cout << "Running sort(" << i << ", " << j << ") {\n";
    // odsazeni++;
    // int pocet = 0;
    if (j - i > 1) {
        int s = (i + j) / 2;
        sort(i, s);
        sort(s, j);
        vector<int> Y(0);
        int a = i, b = s;
        while ((a < s) && (b < j)) {
            // pocet++;
            if (compare(X[a], X[b])) {
                Y.push_back(X[a]);
                a++;
            } else {
                Y.push_back(X[b]);
                b++;
            }
        }
        while (a < s) {
            Y.push_back(X[a]);
            a++;
        }
        while (b < s) {
            Y.push_back(X[b]);
            b++;
        }
        for (int ii = 0; ii < Y.size(); ii++) {
            X[i + ii] = Y[ii];
        }
    }
    // odsazeni--;
    // for (int i = 0; i < odsazeni; i++) cout << "  "; cout << "} (" << pocet << " na " << j - i << ")\n";
}

void solve(int N) {
    // odsazeni = 0;
    NN = N;
    X.resize(N);
    for (int i = 0; i < N; i++) {
        X[i] = i + 1;
    }
    def = publish(X);
    sort(0, N);
    answer(X);
}
#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...