/*
k--;
seperate (k-1) to the sum of (2^i-1)
==========================
==========================
*/
#include "perm.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vi vector<int>
#define pb push_back
vector<int> construct_permutation(ll k){
k--;
ll p=1,n=0;
for(int i=0;i<59;++i)p*=2;
vi h(60),ans;
for(int i=59;i>=1;--i){
while(k>=p-1){
h[i]++; n+=i;
k-=p-1;
}
p/=2;
} assert(!k);
n--;
for(int i=1;i<=59;++i){
for(int j=0;j<h[i];++j){
vi toadd;
for(int k=0;k<i;++k) toadd.pb(n--);
reverse(begin(toadd),end(toadd));
for(int x:toadd)ans.pb(x);
}
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |