Submission #1201777

#TimeUsernameProblemLanguageResultExecution timeMemory
1201777adiyer순열 (APIO22_perm)C++20
100 / 100
9 ms328 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll inf = 1e9;

vector < int > construct_permutation(ll k){
    ll bit = 0, was = 0;
    for(ll i = 0; i < 60; i++)
        if(k >= (1ll << i))
            bit = i + 1;
    vector < double > ans;
    map < double, int > val;
    while(bit > 0){
        bit -= 2;
        if(bit == -1){
            ans.push_back(inf);
            if(k & 1) ans.push_back(-inf);
            continue;
        }
        ll v = (k >> bit) & 3;
        if(ans.empty()){
            if(v == 2) ans = {0};
            else ans = {1, 0}, was = 1;
            continue;
        }
        if(v == 0) ans.push_back(inf), ans.push_back(inf + 1);
        else if(v == 1) ans.push_back(inf), ans.push_back(inf + 1), ans.push_back(-inf), was = 1;
        else if(v == 2) ans.push_back(inf), ans.push_back(-inf), ans.push_back(inf + 1), was = 1;
        else if(!was) ans.push_back(inf), ans.push_back(-inf), ans.push_back(inf + 1), ans.push_back(-inf - 1), was = 1;
        else ans.push_back(inf), ans.push_back(inf + 1), ans.push_back(1.5); 
        vector < double > c = ans;
        sort(c.begin(), c.end());
        for(ll i = 0; i < c.size(); i++) val[c[i]] = i;
        for(ll i = 0; i < ans.size(); i++) ans[i] = val[ans[i]];
    }    
    vector < double > c = ans;
    sort(c.begin(), c.end());
    for(ll i = 0; i < c.size(); i++) val[c[i]] = i;
    for(ll i = 0; i < ans.size(); i++) ans[i] = val[ans[i]];
    vector < int > res;
    for(auto &i : ans) res.push_back(i);
    return res;
}


#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...