//chcockolateman
#include<bits/stdc++.h>
using namespace std;
std::vector<int> construct_permutation(long long k)
{
k--;
int counter = -1;
vector<int> seq;
vector<bool> swapped;
int turn = 0;
while(k)
{
turn++;
if(turn==1 || k==1)
{
int pos = 0;
while((1ll<<(pos+1)) - 1 <= k)
pos++;
seq.push_back(pos);
counter += pos;
swapped.push_back(false);
// printf("Pos = %d\n",pos);
k -= ((1ll<<pos) - 1);
}
else
{
int pos = 0;
while((1ll<<(pos+1)) <= k)
pos++;
seq.push_back(pos);
counter += pos;
swapped.push_back(true);
}
}
vector<int> ret;
for(int L = 0 ; L < seq.size() ; L++)
{
int last = ret.size() - 1;
counter = counter - seq[L] + 1;
for(int i = 1 ; i <= seq[L] ; i++)
ret.push_back(counter++);
counter = counter - seq[L] - 1;
if(swapped[L])
swap(ret[last],ret[last+1]);
}
return ret;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |