Submission #1352679

#TimeUsernameProblemLanguageResultExecution timeMemory
1352679vahagngArt Collections (BOI22_art)C++20
0 / 100
0 ms332 KiB
#include "art.h"
#include <bits/stdc++.h>
using namespace std;

const int NN = 4001;

int match[NN];

void divide_and_conquer(int i, int N) {
    if (i == N) return;
    vector<int>cur(N);
    int itr = i;
    cur[0] = i;
    for (int j = 1; j <= N; j++) {
        if (match[j] == -1){
            if(itr == i){
                itr++;
                continue;
            }
            cur[j - 1] = itr++;
        }
        else cur[j - 1] = match[j];
    }
    int R1 = publish(cur);
    vector<int>RR;
    for(int j = 1; j < N; j++) RR.push_back(cur[j]);
    RR.push_back(i);
    cur = RR;
    int R2 = publish(cur);
    cerr << R1 << ' ' << R2 << endl;
    match[((N - 1) + (R1 - R2)) / 2 + 1] = i;
    cerr << i << ' ' << ((N - 1) + (R1 - R2)) / 2 + 1 << endl;
    divide_and_conquer(i + 1, N);
}

void solve(int N) {
    vector<int> ord(N);
    iota(ord.begin(), ord.end(), 1);
    for (int i = 1; i <= N; i++) match[i] = -1;
    divide_and_conquer(1, N);
    vector<int> res;
    for (int i = 1; i <= N; i++){
        if(match[i] == -1) match[i] = N;
        res.push_back(match[i]);
    }
    answer(res);
}
#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...