Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Вот работающий сплит
- pair <pnode, pnode> split (pnode t, int k)
- {
- if (t == nullptr)
- {
- return make_pair (nullptr, nullptr);
- }
- t -> relax ();
- int left_size = (t -> left == nullptr) ? 0 : t -> left -> size;
- if (left_size >= k)
- {
- pair <pnode, pnode> temp = split (t -> left, k);
- pnode r = new node (t -> value, temp.second, t -> right);
- return make_pair (temp.first, r);
- }
- else
- {
- pair <pnode, pnode> temp =
- split (t -> right, k - (left_size + 1));
- pnode l = new node (t -> value, t -> left, temp.first);
- return make_pair (l, temp.second);
- }
- }
- вот неработающий
- int getsizee (node* t)
- {
- if(t == NULL)
- return 0;
- else
- return t->size;
- }
- pair <pnode, pnode> split(pnode v, int key) {
- if (v == nullptr){
- pair <node*, node*> p = make_pair(v,v);
- return p;
- }
- v -> relax ();
- int left_size = getsizee (v ->left);
- if ( left_size >= key) {
- pair <pnode, pnode> lr = split(v->left, key);
- v->left = lr.second;
- v->recalc();
- lr.second = v;
- return lr;
- }
- else {
- pair <pnode, pnode> lr = split(v->right, key - left_size - 1);
- v->right = lr.first;
- v->recalc();
- lr.first = v;
- return lr;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement