fork(1) download
  1. /* Author : Jehian Norman Saviero (@Reiva5) */
  2. #include <bits/stdc++.h>
  3.  
  4. /* MACROS SAMPAH */
  5. #define jehian using
  6. #define mau namespace
  7. #define libur std
  8. #define cepet {ios_base::sync_with_stdio(0);cin.tie(NULL);}
  9.  
  10. jehian mau libur;
  11. /* MACROS FOR TYPE */
  12. typedef long l;
  13. typedef long double ld;
  14. typedef long long ll;
  15. typedef unsigned long ul;
  16. typedef unsigned long long ull;
  17. typedef vector<int> vi;
  18. typedef vector<l> vl;
  19. typedef vector<ll> vll;
  20. typedef pair<int, int> pi;
  21. typedef pair<l,l> pl;
  22. typedef pair<ll,ll> pll;
  23.  
  24. /* MACROS FOR PRINT */
  25. #define nl printf("\n");
  26. #define sp printf(" ");
  27.  
  28. /* MACROS FOR FUNCTION */
  29. #define pb push_back
  30. #define mp make_pair
  31.  
  32. bool cmp (const ll& a, const ll& b){
  33. return a > b;
  34. }
  35.  
  36. vll data;
  37. queue<ll> q;
  38. vll solution;
  39. ll x;
  40. ll temp;
  41. ll N, M;
  42. int main(){
  43. data.clear();
  44. scanf("%lld %lld", &N, &M);
  45. while (N--){
  46. scanf("%lld",&temp);
  47. data.pb(temp);
  48. }
  49. sort(data.begin(), data.end());
  50. while (M--){
  51. scanf("%lld",&temp);
  52. while (solution.size() < temp){
  53. while(data.size() > 0 || !q.empty()){
  54. if (q.empty()) {
  55. solution.pb(data[data.size()-1]);
  56. x = data[data.size()-1];
  57. if (x >= 2){
  58. q.push(data[data.size()-1]/2);
  59. }
  60. data.pop_back();
  61. } else {
  62. if (data.size() > 0 && !q.empty() && q.front() > data[data.size()-1]){
  63. solution.pb(q.front());
  64. x = q.front();
  65. q.pop();
  66. if (x >= 2){
  67. q.push(x/2);
  68. }
  69. } else if (data.size() > 0 && !q.empty() && q.front() < data[data.size()-1]){
  70. solution.pb(data[data.size()-1]);
  71. x = data[data.size()-1];
  72. if (x >= 2){
  73. q.push(data[data.size()-1]/2);
  74. }
  75. data.pop_back();
  76. } else {
  77. solution.pb(q.front());
  78. x = q.front();
  79. q.pop();
  80. if (x >= 2){
  81. q.push(x/2);
  82. }
  83. }
  84. }
  85. }
  86. }
  87. printf("%lld\n",solution[temp-1]);
  88. }
  89. return 0;
  90. }
Success #stdin #stdout 0s 16072KB
stdin
4 6
8 5 3 1
1
2
3
4
6
8
stdout
8
5
4
3
2
1