Guest User

Untitled

a guest
Nov 18th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <map>
  4. #include <vector>
  5. #include <string>
  6. using namespace std;
  7. struct Node {
  8. int val, key, sz;
  9. Node * left, * right;
  10. Node(int value): val(value), key(rand()), sz(1), left(nullptr), right(nullptr) {}
  11. };
  12. typedef Node * Pnode;
  13. int size(Pnode root) {
  14. if (!root) {
  15. return 0;
  16. }
  17. return root->sz;
  18. }
  19. void update(Pnode & root) {
  20. if(root)
  21. root->sz = size(root->left) + size(root->right) + 1;
  22. }
  23. void merge(Pnode & t, Pnode l, Pnode r) {
  24. if (!l || !r)
  25. t = l ? l : r;
  26. else if (l->key > r->key)
  27. merge(l->right, l->right, r), t = l;
  28. else
  29. merge(r->left, l, r->left), t = r;
  30. update(t);
  31. }
  32.  
  33. void split(Pnode t, Pnode & l, Pnode & r, int key, int add = 0) {
  34. if (!t)
  35. return void(l = r = 0);
  36. int cur_key = add + size(t->left); // вычисляем неявный ключ
  37. if (key <= cur_key)
  38. split(t->left, l, t->left, key, add), r = t;
  39. else
  40. split(t->right, t->right, r, key, add + 1 + size(t->left)), l = t;
  41. update(t);
  42. }
  43. void push(Pnode & root, int k) {
  44. Pnode a(k);
  45. merge(root, root, a);
  46. }
  47. int main()
  48. {
  49. int n, k;
  50. cin >> n >> k;
  51. Pnode g(1);
  52. for (int i = 2; i <= n; i++) {
  53. push(g, i);
  54. }
  55. for (int i = 1; i <= n; i++) {
  56. push(g, i);
  57. }
  58.  
  59. }
Add Comment
Please, Sign In to add comment