at3107

metadata

Oct 23rd, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define rep(i,j,k) for(int i=j;i<k;i++)
  3. using namespace std;
  4. struct Node
  5. {
  6. int *val;
  7. Node **cp;
  8. int end;
  9. int n;
  10. Node()
  11. {
  12. val=new int[5];
  13. cp=new Node *[6];
  14. end=1;
  15. n=0;
  16. rep(i,0,6) cp[i]= NULL;
  17. }
  18. };
  19. Node *root= new Node(), *np = NULL, *x = NULL;
  20. int divide(Node *x, int i)
  21. {
  22. int half;
  23. Node *np1, *np3;
  24. np3 = new Node();
  25. np3->end = 1;
  26. if (i!=-1)
  27. {
  28. Node *temp;
  29. temp = x->cp[i];
  30. half = temp->val[2];
  31. temp->val[2] = 0;
  32. temp->n--;
  33. rep(j,3,5)
  34. {
  35. np3->val[j - 3] = temp->val[j];
  36. np3->n++;
  37. temp->val[j] = 0;
  38. temp->n--;
  39. }
  40. x->cp[i + 1] = temp;
  41. x->cp[i + 1] = np3;
  42. }
  43. else
  44. {
  45. half = x->val[2];
  46. x->val[2] = 0;
  47. x->n--;
  48. np1 = new Node();
  49. np1->end = 0;
  50. x->end = 1;
  51. rep(j,3,5)
  52. {
  53. np3->val[j - 3] = x->val[j];
  54. np3->cp[j - 3] = x->cp[j];
  55. np3->n++;
  56. x->val[j] = 0;
  57. x->n--;
  58. }
  59. rep(j,0,6)
  60. {
  61. x->cp[j] = NULL;
  62. }
  63. np1->val[0] = half;
  64. np1->cp[np1->n] = x;
  65. np1->cp[np1->n + 1] = np3;
  66. np1->n++;
  67. root = np1;
  68. }
  69. return half;
  70. }
  71. void insert(int num)
  72. {
  73.  
  74. x = root;
  75. int temp,i;
  76. if (x->end == 1 and x->n == 5)
  77. {
  78. temp = divide(x, -1);
  79. x = root;
  80. for(i=0;i<x->n;i++)
  81. {
  82. if (num < x->val[0]) break;
  83. else if ((num > x->val[i]) && (num < x->val[i + 1]))
  84. {
  85. i++;
  86. break;
  87. }
  88. }
  89. x = x->cp[i];
  90. }
  91. else
  92. {
  93. while (x->end != 1)
  94. {
  95. for(i=0;i<x->n;i++)
  96. {
  97. if (num < x->val[0]) break;
  98. else if ((num > x->val[i]) && (num < x->val[i + 1]))
  99. {
  100. i++;
  101. break;
  102. }
  103. }
  104. if((x->cp[i])->n != 5) x = x->cp[i];
  105. else
  106. {
  107. temp = divide(x, i);
  108. x->val[x->n] = temp;
  109. x->n++;
  110. continue;
  111. }
  112.  
  113. }
  114. }
  115. x->val[x->n] = num;
  116. sort(x->val,x->val+(x->n+1));
  117. x->n++;
  118. }
  119. void trav(Node *p)
  120. {
  121. cout<<endl;
  122. rep(i,0,p->n)
  123. {
  124. if (p->end != 1) trav(p->cp[i]);
  125. cout << " " << p->val[i];
  126. }
  127. if (p->end != 1) trav(p->cp[p->n]);
  128. cout<<endl;
  129. }
  130. int main()
  131. {
  132. int n;
  133. cout<<"enter number element\n";
  134. cin>>n;
  135. rep(i,0,n)
  136. {
  137. int t;
  138. cout<<"element:\n";
  139. cin>>t;
  140. insert(t);
  141. }
  142. cout<<"Tree is\n";
  143. trav(root);
  144. }
Add Comment
Please, Sign In to add comment