Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. Вот работающий сплит
  2.  
  3.  
  4. pair <pnode, pnode> split (pnode t, int k)
  5. {
  6. if (t == nullptr)
  7. {
  8. return make_pair (nullptr, nullptr);
  9. }
  10. t -> relax ();
  11. int left_size = (t -> left == nullptr) ? 0 : t -> left -> size;
  12. if (left_size >= k)
  13. {
  14. pair <pnode, pnode> temp = split (t -> left, k);
  15. pnode r = new node (t -> value, temp.second, t -> right);
  16. return make_pair (temp.first, r);
  17. }
  18. else
  19. {
  20. pair <pnode, pnode> temp =
  21. split (t -> right, k - (left_size + 1));
  22. pnode l = new node (t -> value, t -> left, temp.first);
  23. return make_pair (l, temp.second);
  24. }
  25. }
  26.  
  27.  
  28. вот неработающий
  29.  
  30. int getsizee (node* t)
  31. {
  32. if(t == NULL)
  33. return 0;
  34. else
  35. return t->size;
  36. }
  37. pair <pnode, pnode> split(pnode v, int key) {
  38. if (v == nullptr){
  39. pair <node*, node*> p = make_pair(v,v);
  40. return p;
  41. }
  42. v -> relax ();
  43. int left_size = getsizee (v ->left);
  44. if ( left_size >= key) {
  45. pair <pnode, pnode> lr = split(v->left, key);
  46. v->left = lr.second;
  47. v->recalc();
  48. lr.second = v;
  49. return lr;
  50. }
  51. else {
  52. pair <pnode, pnode> lr = split(v->right, key - left_size - 1);
  53. v->right = lr.first;
  54. v->recalc();
  55. lr.first = v;
  56. return lr;
  57. }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement