Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. vector<int> d;
  8.  
  9. void heap_add(vector <pair <int, int>> &h, int x, int pos)
  10. {
  11. h.push_back(make_pair(x, pos));
  12. d.push_back(h.size() - 1);
  13. pos = h.size() - 1;
  14. while (pos >= 0 && h[(pos) / 2].first > h[pos].first)
  15. {
  16. swap(h[(pos) / 2], h[pos]);
  17. swap(d[h[pos].second], d[h[(pos) / 2].second]);
  18. pos = (pos) / 2;
  19. }
  20. }
  21.  
  22. void heapify(vector <pair <int, int>> &h, int i, int x)
  23. {
  24. while (2 * i + 1 < x)
  25. {
  26. int j = 2 * i + 1;
  27. if ((j + 1) < x && h[j].first < h[j + 1].first)
  28. j++;
  29. if (h[i].first >= h[j].first)
  30. break;
  31. swap(h[j], h[i]);
  32. swap(d[h[i].second], d[h[j].second]);
  33. i = j;
  34. }
  35. }
  36.  
  37. void DEL(vector <pair <int, int>> &h, int k)
  38. {
  39. int j = d[k];
  40. swap(h[j], h[h.size() - 1]);
  41. swap(d[h[j].second], d[h[h.size() - 1].second]);
  42. h.pop_back();
  43. heapify(h, j, h.size());
  44. }
  45.  
  46.  
  47. void FIND(vector <pair <int, int>> &h, int m)
  48. {
  49. vector<int> a;
  50. int max_a = min(64, int(h.size()));
  51. for (int i = 0; i < max_a; i++)
  52. a.push_back(h[i].first);
  53. nth_element(a.begin(), a.begin() + m, a.end());
  54. cout << a[m] << endl;
  55. }
  56.  
  57. int main()
  58. {
  59. int n, x, m, k;
  60. char s;
  61. cin >> n;
  62. vector <pair <int, int>> h;
  63. int count = 0;
  64. for (int i = 0; i < n; i++)
  65. {
  66. cin >> s;
  67. if (s == 'A')
  68. {
  69. for (int i = 0; i < 3; i++)
  70. cin >> s;
  71. cin >> x;
  72. heap_add(h, x, count);
  73. count++;
  74. cin >> s;
  75. continue;
  76. }
  77. if (s == 'F')
  78. {
  79. for (int i = 0; i < 4; i++)
  80. cin >> s;
  81. cin >> m;
  82. m--;
  83. FIND(h, m);
  84. cin >> s;
  85. continue;
  86. }
  87. if (s == 'D')
  88. {
  89. for (int i = 0; i < 3; i++)
  90. cin >> s;
  91. cin >> k;
  92. k--;
  93. DEL(h, k);
  94. cin >> s;
  95. continue;
  96. }
  97. }
  98. return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement