Submission #1296522

#TimeUsernameProblemLanguageResultExecution timeMemory
1296522eri16Permutation (APIO22_perm)C++20
61.09 / 100
11 ms2416 KiB
#include <bits/stdc++.h> #include "perm.h" using namespace std; using ll = long long; long long fact(int n){ long long r = 1; for (int i = 2; i <= n; i++) r *= i; return r; } #include <bits/stdc++.h> using namespace std; using ll = long long; struct Fenwick { int n; vector<ll> bit; Fenwick(int n = 0): n(n), bit(n+1, 0) {} void add(int idx, ll val){ for (; idx <= n; idx += idx & -idx) bit[idx] += val; } ll sumPrefix(int idx){ ll res = 0; for (; idx > 0; idx -= idx & -idx) res += bit[idx]; return res; } }; ll solve(const vector<int>& a){ int n = (int)a.size(); if (n == 0) return 1; Fenwick fw(n); ll total_non_empty = 0; for (int i = 0; i < n; ++i) { int val = a[i] + 1; ll sum_smaller = fw.sumPrefix(val - 1); ll dpi = sum_smaller + 1; fw.add(val, dpi); total_non_empty += dpi; } return total_non_empty + 1; } ll extra_subseq(int L){ ll power = 1; for (int i = 0; i < L; ++i) { power *= 2; } return power - L - 1; } vector<int> construct_permutation(long long k){ if (k<=2000){ vector <int> v; for (int i=k-2; i>=0; i--){ v.push_back(i); } return v; } vector <ll> f; f.push_back(0); int c=1; while (c<60){ f.push_back(extra_subseq(c)); c++; } ll cur=1998; vector <int> v; while (k>2000){ for (int i=59; i>=0; i--){ if (k-f[i]>=2000){ k=k-f[i]; cur=cur-i+1; v.push_back(cur); cur--; break; } } } vector <int> vv; int tt=0,tp=1998; while (tt<v.size()){ for (int i=v[tt]; i<=tp; i++){ vv.push_back(i); } tp=v[tt]-1; tt++; } for (int i=tp; i>=0; i--){vv.push_back(i);} return vv; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...