제출 #644796

#제출 시각아이디문제언어결과실행 시간메모리
644796Tenis0206순열 (APIO22_perm)C++17
0 / 100
1 ms212 KiB
#include <bits/stdc++.h>

//#define home

using namespace std;

int fr[100005];

vector<int> construct_permutation(long long k)
{
    int nr = 0;
    long long aux = k;
    while(aux!=1)
    {
        ++nr;
        aux /= 2;
    }
    vector<int> suf;
    for(int b=0;b<nr;b++)
    {
        if((k & (1LL<<b)) != 0)
        {
            suf.push_back(b + suf.size());
        }
    }
    reverse(suf.begin(),suf.end());
    for(auto it : suf)
    {
        ++fr[it];
    }
    int cnt = 0;
    vector<int> rez;
    for(int i=1;i<=nr;i++)
    {
        while(fr[cnt])
        {
            ++cnt;
        }
        rez.push_back(cnt);
        ++cnt;
    }
    for(auto it : suf)
    {
        rez.push_back(it);
    }
    return rez;
}

#ifdef home

int q;

int main()
{
    cin>>q;
    for(int i=1;i<=q;i++)
    {
        long long k;
        cin>>k;
        vector<int> rez = construct_permutation(k);
        for(auto it : rez)
        {
            cout<<it<<' ';
        }
        cout<<'\n';
    }
    return 0;
}

#endif // home
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...