Advertisement
hurmawe

Декартовое дерево по неявному ключу 5

Mar 12th, 2021
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. struct node// добавлена ячейка rev
  2. {
  3.     uint8_t color     = NULL;
  4.     int value_node    = NULL;
  5.     int size          = NULL;
  6.     int sum           = NULL;
  7.     int average_color = NULL;
  8.     int add           = NULL;
  9.     int add_color     = NULL;
  10.     bool rev          = false;
  11.     node* left        = nullptr;
  12.     node* right       = nullptr;
  13.    
  14.     node(int new_value)
  15.     {
  16.         value_node = new_value;
  17.         size = 1;
  18.     }
  19.     node(uint8_t new_color)
  20.     {
  21.         color = new_color;
  22.         average_color = color;
  23.     }
  24. };
  25.  
  26. void reverse(node* A,int left_face, int right_face) // установка переворота
  27. {
  28.     Pair left = split(A, left_face);
  29.     Pair right = split(left.second, right_face);
  30.  
  31.     right.second->rev ^= true;
  32.  
  33.     left.second = merge(right.first, right.second);
  34.     merge(left.first, left.second);
  35. }
  36. void push(node* A) { // проталкивание переворота
  37.     if (A->rev) {
  38.         swap(A->left, A->right);
  39.         if (A->left)
  40.             A->left->rev ^= 1;
  41.         if (A->right)
  42.             A->right->rev ^= 1;
  43.     }
  44.     A->rev = false;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement