#include "monster.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fastIO cin.tie(0); ios::sync_with_stdio(false)
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
vector<int> dnc(vector<int> idcs, int l, int r) {
if(idcs.size() == 1) return idcs;
if(l == r) return idcs;
if(l == r+1) {
if(! Query(idcs[0], idcs[1])) { // 0 is less than
swap(idcs[0], idcs[1]);
}
return idcs;
}
int rand = rng();
int pivot = abs(rand)%idcs.size();
vector<int> la, ra;
for(int i = 0; i < idcs.size(); i++) {
if(i == pivot) continue;
if(Query(idcs[pivot], idcs[i])) {
la.push_back(idcs[i]);
} else ra.push_back(idcs[i]);
}
// cout << idcs[pivot] << '\n';
// for(auto &i : la) cout << i << ' '; cout << '\n';
// for(auto &i : ra) cout << i << ' '; cout << '\n';
la = dnc(la, l, l+la.size()-1);
ra = dnc(ra, l+la.size()+1, r);
vector<int> ans;
// case 1, we dont break
if(min(la.size(), ra.size()) != 1) {
ans.insert(ans.end(), la.begin(), la.end());
ans.push_back(idcs[pivot]);
ans.insert(ans.end(), ra.begin(), ra.end());
swap(ans[la.size()-1], ans[la.size()+1]);
} else {
// case 2.1 we are on the edge
if(la.size() == 1) {
if(Query(la[0], ra[0])) {
// the pivot is the smallest
ans.push_back(idcs[pivot]);
ans.push_back(la[0]);
ans.insert(ans.end(), ra.begin(), ra.end());
} else {
ans.insert(ans.end(), la.begin(), la.end());
ans.push_back(idcs[pivot]);
ans.insert(ans.end(), ra.begin(), ra.end());
swap(ans[la.size()-1], ans[la.size()+1]);
}
} else {
if(Query(ra[0], la[la.size()-1])) {
// the pivot is the biggest
ans.insert(ans.end(), la.begin(), la.end());
ans.push_back(ra[0]);
ans.push_back(idcs[pivot]);
} else {
ans.insert(ans.end(), la.begin(), la.end());
ans.push_back(idcs[pivot]);
ans.insert(ans.end(), ra.begin(), ra.end());
swap(ans[la.size()-1], ans[la.size()+1]);
}
}
}
return ans;
}
vector<int> Solve(int n) {
vector<int> arr; for(int i = 0; i < n; i++) arr.push_back(i);
vector<int> ans1 = dnc(arr, 0, n-1);
vector<int> ans2(n);
for(int i = 0; i < n; i++) ans2[ans1[i]] = i;
return ans2;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |