Advertisement
zhukov000

Cartesian tree, insert sorted

Dec 28th, 2019
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int MAX_CNT = 50001;
  5.  
  6. struct Node
  7. {
  8.   int key, y;
  9.   int left, right, parent;
  10.   Node(int x = 0): key(x), y(0), left(0), right(0), parent(0) {}
  11. };
  12.  
  13. Node nodes[MAX_CNT + 1];
  14.  
  15. int root_id = 0; // id of root node
  16.  
  17. int insert_sorted(const int & right_node, const int & key, const int & y, const int & new_node)
  18. {
  19.   int parent_node = right_node, left_node = 0;
  20.   while (parent_node != 0 && nodes[parent_node].y > y)
  21.   {
  22.     left_node = parent_node;
  23.     parent_node = nodes[parent_node].parent;
  24.   }
  25.   nodes[new_node].key = key;
  26.   nodes[new_node].y = y;
  27.   nodes[new_node].parent = parent_node;
  28.   nodes[new_node].left = left_node;
  29.   if ( left_node != 0 ) nodes[left_node].parent = new_node;
  30.   if ( parent_node != 0 ) nodes[parent_node].right = new_node;
  31.   return new_node;
  32. }
  33.  
  34. int main()
  35. {
  36.   ios_base::sync_with_stdio(0);
  37.   cin.tie(0);
  38.   cout.tie(0);
  39.   // freopen("INPUT.TXT", "r", stdin);
  40.   int n;
  41.   cin >> n;
  42.   vector< tuple<int,int,int> > data;
  43.   for(int i=0; i<n; ++i)
  44.   {
  45.     int a, b;
  46.     cin >> a >> b;
  47.     data.push_back( tuple<int,int,int>(a, b, i+1) );
  48.   }
  49.   sort(data.begin(), data.end());
  50.  
  51.   int right_node = root_id;
  52.   for(auto & e: data)
  53.   {
  54.     int x, y, i;
  55.     tie(x, y, i) = e;
  56.     right_node = insert_sorted(right_node, x, y, i);
  57.   }
  58.   cout << "YES" << endl;
  59.   for(int i=1; i <= n; ++i)
  60.   {
  61.     cout << nodes[i].parent << " " << nodes[i].left << " " << nodes[i].right << endl;
  62.   }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement