File tree 1 file changed +56
-0
lines changed
1 file changed +56
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments