Submission #1352702

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

const int NN = 4001;

int match[NN];

map<vector<int>, int> mp;

void divide_and_conquer(int i, int N) {
    if (i == N) return;
    vector<int>cur;
    for(int j = i; j <= N; j++) cur.push_back(j);
    for(int j = 1; j < i; j++) cur.push_back(j);
    int R1 = (mp.count(cur) ? mp[cur] : publish(cur));
    mp[cur] = R1;
    cur.clear();
    for(int j = i + 1; j <= N; j++) cur.push_back(j);
    for(int j = 1; j <= i; j++) cur.push_back(j);
    int R2 = (mp.count(cur) ? mp[cur] : publish(cur));
    mp[cur] = R2;
    match[((N - 1) + R1 - R2) / 2 + 1] = i;
    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...