Submission #1362724

#TimeUsernameProblemLanguageResultExecution timeMemory
1362724jackhui100101Permutation (APIO22_perm)C++20
0 / 100
0 ms344 KiB
#include "perm.h"
#include <bits/stdc++.h>
using namespace std;
int cnt, ss = 0;
vector<vector<int>> ans(70);
vector<long long> pw2(61, 1);
void solve(long long k){
	for (int i = 1; i < 61; i++){
		if (k == pw2[i] - 1){
			for (int j = 0; j < i; j++){
				ans[cnt].push_back(j);
			}
			ss += ans[cnt].size();
			cnt++;
			return;
		}
		if (k < pw2[i] - 1){
			int in = i - 1;
			solve(pw2[in] - 1);
			solve(k - pw2[in] + 1);
			return;
		}
	}
}
vector<int> construct_permutation(long long k){
	for (int i = 1; i < 61; i++) pw2[i] = pw2[i - 1] * 2;
	for (int i = 0; i < 70; i++) ans[i].clear();
	cnt = 0;
	solve(k - 1);
	vector<int> ans2;
	for (int i = 0; i < cnt; i++){
		for (int j = 0; j < ans[i].size(); j++){
			ans2.push_back(ss - ans[i].size() + j);
		}
		ss -= ans[i].size();
	}
	for (int i = 0; i < ans2.size(); i++) cout << ans2[i] << " ";
	cout << "\n";
	return ans2;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...