Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1.  
  2. #include <vector>
  3. #include <stdio.h>
  4. #include <cstdlib>
  5. using namespace  std;
  6. struct Treap
  7. {
  8.   long long key;
  9.   long long priority;//rand();
  10.   //long long value=0;
  11.   //long long sum=0;
  12.   Treap* left=nullptr;
  13.   Treap* right=nullptr;
  14.  
  15. };
  16. /*
  17. long long sum(Treap* t)
  18. {
  19.   if(t==nullptr)
  20.     return 0;
  21.   return t->sum;
  22. }
  23.  
  24. void update(Treap* t)
  25. {
  26.   t->sum=t->value+sum(t->left)+sum(t->right);
  27. }
  28. */
  29. Treap* merge(Treap* left, Treap* right)
  30. {
  31.   if(right==nullptr)
  32.   {
  33.     return left;
  34.   }
  35.   if(left==nullptr)
  36.   {
  37.     return right;
  38.   }
  39.   if(left->priority>right->priority)
  40.   {
  41.     left->right=merge(left->right, right);
  42.     //update(left);
  43.     return left;
  44.   }
  45.   right->left=merge(left, right->left);
  46.   //update(right);
  47.   return right;
  48.  
  49. }
  50. void split(Treap* treap, long long key, Treap*& left, Treap*& right)
  51. {
  52.   if(treap==nullptr)
  53.   {
  54.     left=nullptr;
  55.     right=nullptr;
  56.     return;
  57.   }
  58.   if(treap->key<key)
  59.   {
  60.     split(treap->right, key, treap->right, right);
  61.     left=treap;
  62.   }
  63.   else
  64.   {
  65.     split(treap->left, key, left, treap->right);
  66.     right=treap;
  67.   }
  68.   //update(treap);
  69.  
  70. }
  71. void GetTree(Treap* treap)
  72. {
  73.   if(treap==nullptr)
  74.   {
  75.     printf("null\n");
  76.     return;
  77.   }
  78.   printf("%lld %lld\n", treap->key, treap->priority);
  79.   GetTree(treap->left);
  80.   GetTree(treap->right);
  81.  
  82. }
  83.  
  84. int main()
  85. {
  86.   long long k,p,n;
  87.   scanf("%lld", &n);
  88.   Treap* treap=nullptr;
  89.  
  90.   for(int i=0;i<n;i++)
  91.   {
  92.     scanf("%lld%lld", &k,&p);
  93.     Treap* node=new Treap;
  94.     node->key=k;
  95.     node->priority=p;
  96.     Treap* left=nullptr;
  97.     Treap* right=nullptr;
  98.     split(treap, k, left,right);
  99.     treap=merge(left, merge(node, right));
  100.   }
  101.   GetTree(treap);
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement