#include "monster.h"
//#include "grader.cpp"
#include<bits/stdc++.h>
#define ll long long
#define F first
#define S second
using namespace std;
vector<int> Solve(int N) {
int n=N;
vector<int> id(n);
for(int i=0;i<n;i++)id[i]=i;
auto mg=[&](auto MG,int l,int r){
if(l==r)return;
int m=(l+r)>>1;
MG(MG,l,m);
MG(MG,m+1,r);
vector<int> nw;
int lp=l,rp=m+1;
while(lp!=m+1&&rp!=r+1){
if(Query(id[lp],id[rp])){
nw.push_back(id[rp]);
rp++;
}else{
nw.push_back(id[lp]);
lp++;
}
}
while(lp!=m+1){
nw.push_back(id[lp]);
lp++;
}
while(rp!=r+1){
nw.push_back(id[rp]);
rp++;
}
for(int i=l;i<=r;i++){
id[i]=nw[i-l];
}
return;
};
mg(mg,0,n-1);
auto f4=[&](auto F4){
pair<int,int> win[4]={};
for(int i=0;i<4;i++){
win[i].S=id[i];
for(int j=i+1;j<4;j++){
if(Query(id[i],id[j])){
win[i].F++;
}else{
win[j].F++;
}
}
}
sort(&win[0],&win[4]);
if(win[3].F==3){
}
if(Query(win[1].S,win[0].S))swap(win[0],win[1]);
if(Query(win[3].S,win[2].S))swap(win[3],win[2]);
for(int i=0;i<4;i++){
id[i]=win[i].S;
}
};
f4(f4);
vector<int> ans(n);
for(int i=0;i<n;i++){
ans[id[i]]=i;
}
// for(auto x:id){
// cout<<x<<" ";
// }
// cout<<"\n";
// for(auto x:ans){
// cout<<x<<" ";
// }
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |