Advertisement
IzhanVarsky

Untitled

Apr 12th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <string>
  4. #include <ctime>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. struct Node {
  10. int X, Y, size;
  11. Node *Left, *Right;
  12.  
  13. Node(int x, int y, int s = 1) {
  14. X = x;
  15. Y = y;
  16. size = s;
  17. Left = nullptr;
  18. Right = nullptr;
  19. }
  20. };
  21.  
  22. int getSize(Node *treap) {
  23. return treap ? treap->size : 0;
  24. }
  25.  
  26. void updSize(Node *treap){
  27. if (treap != nullptr) treap->size = getSize(treap->Left) + getSize(treap->Right) + 1;
  28. }
  29.  
  30. void split(Node *treap, int pivotKey, Node *&lRes, Node *&rRes) {
  31. if (treap == nullptr) {
  32. lRes = rRes = nullptr;
  33. } else if (pivotKey < treap->X) {
  34. split(treap->Left, pivotKey, lRes, treap->Left);
  35. rRes = treap;
  36. updSize(rRes);
  37. } else {
  38. split(treap->Right, pivotKey, treap->Right, rRes);
  39. lRes = treap;
  40. updSize(lRes);
  41. }
  42. }
  43.  
  44. void merge(Node *&treap, Node *l, Node *r) {
  45. if (!l || !r) {
  46. treap = l ? l : r;
  47. } else if (l->Y > r->Y) {
  48. merge(l->Right, l->Right, r);
  49. treap = l;
  50. } else {
  51. merge(r->Left, l, r->Left);
  52. treap = r;
  53. }
  54. updSize(treap);
  55. }
  56.  
  57. void insert(Node *&treap, Node *toIns) {
  58. Node *t1, *t2;
  59. split(treap, toIns->X, t1, t2);
  60. merge(treap, t1, toIns);
  61. merge(treap, treap, t2);
  62. updSize(treap);
  63. }
  64.  
  65. void del(Node *&treap, int key) {
  66. Node *t1, *t2, *t3;
  67. split(treap, key - 1, t1, t2);
  68. split(t2, key, t2, t3);
  69. merge(treap, t1, t3);
  70. updSize(treap);
  71. }
  72. void printTreap(Node *&treap) {
  73. if (treap == nullptr) return;
  74. printTreap(treap->Left);
  75. cout << treap->X << " ";
  76. printTreap(treap->Right);
  77. }
  78.  
  79. int main() {
  80. srand(time(nullptr));
  81. ios_base::sync_with_stdio(false);
  82. cin.tie(nullptr);
  83. cout.tie(nullptr);
  84. Node *treap = nullptr;
  85. int n, m;
  86. cin >> n >> m;
  87. for (int i = 0; i < m; ++i) {
  88. merge(treap, treap, new Node(rand(), 0, 1));
  89. updSize(treap);
  90. }
  91.  
  92. printTreap(treap);
  93. cout << endl;
  94.  
  95. for (int i = 1; i <= n; ++i) {
  96. int x;
  97. cin >> x;
  98. insert(treap, x, new Node(rand(), i));
  99. }
  100.  
  101. printTreap(treap);
  102. cout << endl;
  103. return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement