Submission #1225149

#TimeUsernameProblemLanguageResultExecution timeMemory
1225149KALARRYPermutation (APIO22_perm)C++20
0 / 100
0 ms320 KiB
//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++;
            k -= (1ll<<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]);
    }
	for(auto x : ret)
		printf("%d ",x);
	printf("\n\n");
    return ret;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...