제출 #742501

#제출 시각아이디문제언어결과실행 시간메모리
742501keisuke6순열 (APIO22_perm)C++17
0 / 100
1 ms212 KiB
#include "perm.h"
#include <vector>
#include <iostream>
#include <set>
#include <map>
#include <algorithm>
using namespace std;

vector<int> construct_permutation(long long k)
{
	vector<int> A = {};
	int now = 300;
	int ans = 1;
	while(ans*2 <= k){
		A.push_back(now);
		ans *= 2;
		now++;
	}
	set<int> B;
	int n = A.size();
	for(int i=0;i<=n;i++){
		if((1ll<<(n-i))+ans <= k) B.insert(i);
	}
	vector<int> Ans = {};
	now = 100;
	for(int i=0;i<n;i++){
    	if(B.count(i)) Ans.push_back(now);
		Ans.push_back(A[i]);
		now--;
	}
    if(B.count(n)) Ans.push_back(now);
	n = Ans.size();
	vector<int> Ansc = Ans;
	sort(Ans.begin(),Ans.end());
	map<int,int> m;
	for(int i=0;i<n;i++) m[Ans[i]] = i;
	vector<int> Ans_ = {};
	for(int i=0;i<n;i++) Ans_.push_back(m[Ansc[i]]);
	return Ans_;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...