#include <bits/stdc++.h>
#include "monster.h"
using namespace std;
#define all(a) (a).begin(),(a).end()
#define bg(a) (a).begin()
#define ed(a) (a).end()
#define sz(a) (int)(a).size()
#define ii pair<int,int>
#define fi first
#define se second
vector<int> sort(vector<int> cr){
if(sz(cr)==1) return cr;
int m=sz(cr)/2;
vector<int> a(bg(cr),bg(cr)+m),b(bg(cr)+m,ed(cr));
a=sort(a); b=sort(b);
int ap=0,bp=0;
for(int i=0;i<sz(cr);++i){
if(ap==sz(a)) cr[i]=b[bp++];
else if(bp==sz(b)) cr[i]=a[ap++];
else if(Query(a[ap],b[bp])) cr[i]=b[bp++];
else cr[i]=a[ap++];
}
return cr;
}
vector<int> Solve(int N){
vector<int> ans(N);
iota(all(ans),0);
ans=sort(ans);
vector<ii> win(min(N,10));
for(int i=0;i<min(N,10);++i){
win[i].se=ans[i];
for(int j=i+1;j<min(N,10);++j)
if(Query(ans[i],ans[j])) win[i].fi++;
else win[j].fi++;
}
sort(all(win));
int bk=win[0].se;
if(Query(win[1].se,win[0].se)) bk=win[1].se;
ans.erase(find(all(ans),bk));
ans.insert(bg(ans),bk);
for(int i=1;i<N;++i){
int j=i;
while(j<N&&Query(ans[j],bk)) j++;
reverse(bg(ans)+i,bg(ans)+min(j+1,N));
i=j; bk=ans[i];
}
vector<int> out(N);
for(int i=0;i<N;++i) out[ans[i]]=i;
return out;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |