Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. #include <iostream>
  2. #include<cmath>
  3. using namespace std;
  4. struct Node {
  5.     int x, y;
  6.     Node* l, * r;
  7.     Node() {
  8.         x = NULL; y = NULL; l = NULL; r = NULL;
  9.     }
  10. };
  11.  
  12. void split(Node* node, int k, Node*& l, Node*& r) {
  13.     l = r = NULL;
  14.     if (node == NULL) return;
  15.     if (node->x < k) {
  16.         split(node->r, k, node->r, r);
  17.         l = node;
  18.     }
  19.     else {
  20.         split(node->l, k, l, node->l);
  21.         r = node;
  22.     }
  23. }
  24.  
  25.  
  26. Node* merge(Node* l, Node* r) {
  27.     if (l == NULL) return r;
  28.     if (r == NULL) return l;
  29.     if (l->y > r->y) {
  30.         l->r = merge(l->r, r);
  31.         return l;
  32.     }
  33.     else {
  34.         r->l = merge(l, r->l);
  35.         return r;
  36.     }
  37. }
  38.  
  39.  
  40.  
  41. Node* insert(Node* t, int val) {
  42.     Node* l, * r;
  43.     split(t, val, l, r);
  44.     Node* n = new Node;
  45.     n->x = val;
  46.     n->y = rand();
  47.     n->l = n->r = NULL;
  48.     n = merge(l, merge(n, r));
  49.     return n;
  50. }
  51.  
  52. int main() {
  53.     Node* t=NULL;
  54.     int n, val;
  55.     cin >> n;
  56.     for (int i = 0; i < n; i++) {
  57.         cin >> val;
  58.         t = insert(t, val);
  59.     }
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement