fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int MAXN = 200005;
  5.  
  6. int bit[MAXN];
  7. int a[MAXN];
  8. int n;
  9.  
  10.  
  11. void update(int i, int val) {
  12. for (; i <= n; i += i & -i) bit[i] += val;
  13. }
  14.  
  15.  
  16. int query(int i) {
  17. int res = 0;
  18. for (; i > 0; i -= i & -i) res += bit[i];
  19. return res;
  20. }
  21.  
  22.  
  23. int find_kth(int k) {
  24. int pos = 0;
  25. int sum = 0;
  26. for (int i = 18; i >= 0; --i) {
  27. if (pos + (1 << i) <= n && sum + bit[pos + (1 << i)] < k) {
  28. pos += (1 << i);
  29. sum += bit[pos];
  30. }
  31. }
  32. return pos + 1;
  33. }
  34.  
  35. int main() {
  36. cin >> n;
  37. for (int i = 1; i <= n; i++) cin >> a[i];
  38.  
  39. for (int i = 1; i <= n; i++) {
  40. int p; cin >> p;
  41.  
  42.  
  43. if (i == 1)
  44. for (int j = 1; j <= n; j++) update(j, 1);
  45.  
  46.  
  47. int idx = find_kth(p);
  48. cout << a[idx] << ' ';
  49.  
  50.  
  51. update(idx, -1);
  52. }
  53. cout << endl;
  54. }
  55.  
Success #stdin #stdout 0.01s 5328KB
stdin
Standard input is empty
stdout