Skip to content

Commit 272d7e8

Browse files
Create APIO 22-perm.cpp
1 parent bd8f382 commit 272d7e8

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

APIO/APIO 22-perm.cpp

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#include "perm.h"
2+
3+
#include <bits/stdc++.h>
4+
using namespace std;
5+
6+
vector<int> construct_permutation(long long k) {
7+
int bit = 64 - __builtin_clzll(k);
8+
vector<double> ans;
9+
bool flag = false;
10+
while (bit > 0) {
11+
bit -= 2;
12+
if (bit == -1) {
13+
ans.push_back(1e9);
14+
if (k & 1) ans.push_back(-1e9);
15+
} else {
16+
int val = (k >> bit) & 3;
17+
if (ans.empty()) {
18+
if (val == 2) ans = {0};
19+
else ans = {1, 0}, flag = true;
20+
} else {
21+
if (val == 0) {
22+
ans.push_back(1e9);
23+
ans.push_back(1e9 + 1);
24+
} else if (val == 1) {
25+
ans.push_back(1e9);
26+
ans.push_back(1e9 + 1);
27+
ans.push_back(-1e9);
28+
flag = true;
29+
} else if (val == 2) {
30+
ans.push_back(1e9);
31+
ans.push_back(-1e9);
32+
ans.push_back(1e9 + 1);
33+
flag = true;
34+
} else {
35+
if (!flag) {
36+
ans.push_back(1e9);
37+
ans.push_back(-1e9);
38+
ans.push_back(1e9 + 1);
39+
ans.push_back(-1e9 - 1);
40+
flag = true;
41+
} else {
42+
ans.push_back(1e9);
43+
ans.push_back(1e9 + 1);
44+
ans.push_back(1.5);
45+
}
46+
}
47+
}
48+
}
49+
vector<double> uni(ans.begin(), ans.end());
50+
sort(uni.begin(), uni.end());
51+
for (auto &it : ans)
52+
it = lower_bound(uni.begin(), uni.end(), it) - uni.begin();
53+
}
54+
55+
return vector<int>(ans.begin(), ans.end());
56+
}

0 commit comments

Comments
 (0)