fork download
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. int n,mxlg,x[500005],bit[500005];
  5. void UPDATE(int i, int v)
  6. {
  7. while (i<=n) bit[i]+=v,i+=i&(-i);
  8. return;
  9. }
  10. int GET(int l, int r)
  11. {
  12. l--;
  13. int resl=0,resr=0;
  14. while (l>0) resl+=bit[l],l-=l&(-l);
  15. while (r>0) resr+=bit[r],r-=r&(-r);
  16. return resr-resl;
  17. }
  18. int BS(int lo, int hi, int vl)
  19. {
  20. int ans;
  21. while (lo<=hi)
  22. {
  23. int mid=lo+(hi-lo)/2;
  24. if (GET(1,mid)>=vl) ans=mid,hi=mid-1;
  25. else lo=mid+1;
  26. }
  27. return ans;
  28. }
  29. signed main()
  30. {
  31. ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
  32. cin>>n,mxlg=log(n)/log(2);
  33. for (int i=1;i<=n;i++) cin>>x[i],UPDATE(i,1);
  34. for (int i=1;i<=n;i++)
  35. {
  36. int idx,ans;
  37. cin>>idx;
  38. ans=BS(1,n,idx),UPDATE(ans,-1);
  39. cout<<x[ans]<<' ';
  40. }
  41. return 0;
  42. }
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
Standard output is empty