Advertisement
AlexG2230954

Untitled

Apr 22nd, 2022
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include <iostream>
  2.  
  3.  
  4. using namespace std;
  5.  
  6.  
  7. struct treap {
  8.     struct node {
  9.         node* left;
  10.         node* right;
  11.         int x;
  12.         int y;
  13.  
  14.         node(int _x, int _y) {
  15.             left = nullptr;
  16.             right = nullptr;
  17.             x = _x;
  18.             y = _y;
  19.         }
  20.  
  21.     };
  22.  
  23.     using node_ptr = node*;
  24.  
  25.     node_ptr root;
  26.  
  27.     treap() {
  28.         root = nullptr;
  29.     }
  30.  
  31.     node_ptr merge(node_ptr t1, node_ptr t2) {
  32.         if(t1 == nullptr) return t2;
  33.         if(t2 == nullptr) return t1;
  34.  
  35.         if(t1->y < t2->y) {
  36.             t1->right = merge(t1->right, t2);
  37.             return t1;
  38.         } else {
  39.             t2->left = merge(t1, t2->left);
  40.             return t2;
  41.         }
  42.     }
  43.  
  44.     void split(node_ptr t, int x0, node_ptr & t1, node_ptr & t2) {
  45.         if(t == nullptr) {
  46.             t1 = nullptr;
  47.             t2 = nullptr;
  48.             return;
  49.         }
  50.  
  51.         if(x0 > t->x) {
  52.             split(t->right, x0, t->right, t2);
  53.             t1 = t;
  54.         } else {
  55.             split(t->left, x0, t1, t->left);
  56.             t2 = t;
  57.         }
  58.     }
  59.  
  60.     void insert(int _x, int _y) {
  61.         node_ptr l = nullptr;
  62.         node_ptr r = nullptr;
  63.         node_ptr m = new node(_x, _y);
  64.  
  65.         split(root, _x, l, r);
  66.         root = merge(merge(l, m), r);
  67.     }
  68.  
  69.     void print() {
  70.         print(root, 0);
  71.     }
  72.  
  73.     void print(node_ptr t, int h) {
  74.         if(t == nullptr) return;
  75.  
  76.         print(t->left, h + 1);
  77.  
  78.         for(int i = 0; i < h; i++) cout << "\t\t";
  79.         cout << "(" << t->x << ", " << t->y << ")" << endl;
  80.  
  81.         print(t->right, h + 1);
  82.     }
  83. };
  84.  
  85.  
  86. int main() {
  87.     ios::sync_with_stdio(false);
  88.     cin.tie(0);
  89.  
  90.     treap t;
  91.     int q;
  92.  
  93.     cin >> q;
  94.    
  95.     while(q--) {
  96.         int x, y;
  97.         cin >> x >> y;
  98.  
  99.         t.insert(x, y);
  100.     }
  101.  
  102.     t.print();
  103.     cout << "End of program..." << endl;
  104.  
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement