Advertisement
Guest User

Untitled

a guest
Oct 20th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. #include "stdio.h"
  2. #include "unistd.h"
  3. #include "time.h"
  4. #include "stdlib.h"
  5.  
  6. void int_swap(int * x, int * y)
  7. {
  8. int tmp = *x;
  9. *x = *y;
  10. *y = tmp;
  11. }
  12. int ChL(int i)
  13. {
  14. return 2*i+1;
  15. }
  16. int ChR(int i) { return 2*i+2;}
  17. int Batya(int i) { return (i-1)/2;}
  18. void DownHeap(int * mas, int i, int n)
  19. {
  20. if (ChL(i)<n && ChR(i)<n) // Существует оба сына
  21. {
  22. if (mas[ChL(i)]>mas[ChR(i)])
  23. {
  24. if (mas[i] >= mas[ChL(i)] )
  25. {
  26. return;
  27. }
  28. else
  29. {
  30. int_swap(&mas[i],&mas[ChL(i)]);
  31. DownHeap(mas,ChL(i),n);
  32. return;
  33. }
  34. }
  35. else
  36. {
  37. if (mas[i] >= mas[ChR(i)] )
  38. {
  39. return;
  40. }
  41. else
  42. {
  43. int_swap(&mas[i],&mas[ChR(i)]);
  44. DownHeap(mas,ChR(i),n);
  45. return;
  46. }
  47. }
  48. }
  49. if (ChR(i)>=n && ChL(i)<n)
  50. {
  51. if (mas[i] >= mas[ChL(i)] )
  52. {
  53. return;
  54. }
  55. else
  56. {
  57. int_swap(&mas[i],&mas[ChL(i)]);
  58. DownHeap(mas,ChL(i),n);
  59. return;
  60. }
  61. }
  62. return;
  63. }
  64. void UpHeap (int * mas, int i, int n){
  65. if (mas[Batya(i)] < mas[i]){
  66. int_swap(&mas[i],&mas[Batya(i)]);
  67. UpHeap(mas, Batya(i), n);
  68. }
  69. return;
  70. }
  71.  
  72. void MakeHeap(int * mas, int n)
  73. {
  74. for (int i= n/2; i>=0; i--)
  75. {
  76. DownHeap(mas,i,n);
  77. }
  78. return;
  79. }
  80.  
  81. void HeapSort(int * mas, int n)
  82. {
  83. MakeHeap(mas,n);
  84. for(int i=0; i<n-1;i++)
  85. {
  86. int_swap(&mas[0], &mas[n-1-i]);
  87. DownHeap(mas,0,n-1-i);
  88.  
  89. }
  90. }
  91.  
  92.  
  93.  
  94.  
  95. int main(){
  96. int n;
  97. scanf("%d", &n);
  98. int mas[100000];
  99. int len = 0;
  100. for (int i = 0; i < n; ++i){
  101. int c;
  102. scanf("%d", &c);
  103. if (c == 0){
  104. int k;
  105. scanf("%d", &k);
  106. mas[len] = k;
  107. ++len;
  108. UpHeap(mas, len - 1, len);
  109. }
  110. else{
  111. int_swap(&mas[0], &mas[len - 1]);
  112. printf("%d\n", mas[len - 1]);
  113. --len;
  114. DownHeap(mas, 0, len);
  115. }
  116. }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement