fork download
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4.  
  5. struct deramid_node{
  6. int key;
  7. int priority;
  8. deramid_node *left;
  9. deramid_node *right;
  10. deramid_node *parent;
  11. };
  12.  
  13. typedef deramid_node deramid;
  14.  
  15. void left_rotate(deramid *root, deramid *x){
  16. deramid *y = x->right;
  17. x->right = y->left;
  18. if(y->left != NULL) y->left->parent = x;
  19. y->parent = x->parent;
  20. if(x->parent == NULL) root = y;
  21. else{
  22. if(x == x->parent->left) x->parent->left = y;
  23. else x->parent->right = y;
  24. }
  25. y->left = x;
  26. x->parent = y;
  27. }
  28.  
  29. void right_rotate(deramid *root, deramid *x){
  30. deramid *y = x->left;
  31. x->left = y->right;
  32. if(y->right != NULL) y->right->parent = x;
  33. y->parent = x->parent;
  34. if(x->parent == NULL) root = y;
  35. else{
  36. if(x == x->parent->right) x->parent->right = y;
  37. else x->parent->left = y;
  38. }
  39. y->right = x;
  40. x->parent = y;
  41. }
  42.  
  43. void deramid_insert(deramid *root, deramid *z){
  44. deramid *x = root; //Отмечает проходимый путь
  45. deramid *y = NULL; //Ссылается на родительский по отношению к x узел
  46.  
  47. z->priority = std::rand() % 701;
  48. while(x != NULL){
  49. y = x;
  50. if(z->key < x->key) x = x->left;
  51. else x = x->right;
  52. }
  53. y = z->parent;
  54. if(y == NULL) root = z;
  55. else{
  56. if(z->key < y->key) y->left = z;
  57. else y->right = z;
  58. }
  59. }
  60.  
  61. int main() {
  62. // your code goes here
  63. return 0;
  64. }
Success #stdin #stdout 0s 3452KB
stdin
Standard input is empty
stdout
Standard output is empty