Submission #1164075

#TimeUsernameProblemLanguageResultExecution timeMemory
1164075justPermutation (APIO22_perm)C++20
71.22 / 100
7 ms1096 KiB
#include "bits/stdc++.h" using namespace std; #define all(x) (x).begin(), (x).end() #define vec vector #define int long long vec<int> solve(int k) { // if (k <= 90) { // k--; // vec<int> ans(k); // iota(all(ans), 0); // reverse(all(ans)); // return ans; // } // k--; // empty subsequence vec<int> pows; int sum = 0; for(int i = 62; i >= 1; i--) { int x = (1ll << i) - 1; while (k > x) { pows.push_back(i); sum += i; k -= x; } } int n = sum; vec<int> ans(n); iota(all(ans), 0); int cur = 0; for(int i = 0; i < pows.size(); i++) { reverse(ans.begin() + cur, ans.begin() + cur + pows[i]); cur += pows[i]; } reverse(all(ans)); return ans; } vec<signed> construct_permutation(int k) { vec<int> ans = solve(k); int n = ans.size(); #ifdef debug vec<int> cnt(n); for(int i = 0; i < n; i++) { cnt[i] = 1; for(int j = 0; j < i; j++) { if (ans[j] < ans[i]) { cnt[i] += cnt[j]; } } } int sum = 0; for(int i = 0; i < n; i++) { sum += cnt[i]; } sum++; assert(sum == k); #endif vec<signed> res(n); for(int i = 0; i < n; i++) { res[i] = ans[i]; } return res; } #ifdef debug signed main() { for(int k = 2; k <= 10000; k++) { vec<signed> ans = construct_permutation(k); cout << k << ": "; for(int i = 0; i < ans.size(); i++) { cout << ans[i] << " "; } cout << endl; } } #endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...