Advertisement
Guest User

Untitled

a guest
May 25th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. // HomeworkOrder.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6.  
  7. using namespace std;
  8.  
  9. struct Heap {
  10.  
  11.  
  12. int* T;
  13. int gorup;
  14. //= new int[2000];
  15. int nElements;
  16. bool initialized;
  17. Heap() {
  18. nElements = 0;
  19. initialized = false;
  20. }
  21. ~Heap() {
  22. //if(initialized)
  23. //delete[] T;
  24. }
  25. void initializeArray() {
  26. T = new int[1];
  27. }
  28. void clearMemory() {
  29. delete[] T;
  30. }
  31. void printHeap()
  32. {
  33. int* pom = new int[nElements];
  34. pom = T;
  35.  
  36. for (int i = 0; i<nElements; i++)
  37. for (int j = 1; j<nElements - i; j++)
  38. if (pom[j - 1]>pom[j]){
  39. int a = pom[j - 1];
  40. int b = pom[j];
  41. pom[j] = a;
  42. pom[j - 1] = b;
  43. }
  44. for (int i = nElements-1; i >= 0; --i)
  45. cout << pom[i]<<" ";
  46. cout << endl;
  47.  
  48. //delete[] pom;
  49. }
  50. void heap_push(int v)
  51. {
  52. int i, j;
  53.  
  54. i = nElements;
  55. nElements++;
  56. if (nElements > 1) {
  57. int* tmp = new int[nElements + 1];
  58. tmp = T;
  59. tmp[nElements] = 0;
  60. T = tmp;
  61. }
  62. j = (i - 1) / 2;
  63.  
  64. while (i > 0 && T[j] < v)
  65. {
  66. T[i] = T[j];
  67. i = j;
  68. j = (i - 1) / 2;
  69. }
  70.  
  71. T[i] = v;
  72. }
  73. void heap_pop(bool printValue)
  74. {
  75. int i, j, v;
  76.  
  77. if(printValue &&T[0]!=0)
  78. cout << T[0] << endl;
  79. if (T[0] == 0)
  80. cout << "na" << endl;
  81. //cout << "LICZBA ELEMENTOW: " << nElements << endl;
  82. if (nElements--)
  83. {
  84. int* tmp = new int[nElements];
  85. tmp = T;
  86. T = tmp;
  87.  
  88.  
  89. v = T[nElements];
  90. T[nElements] = 0;
  91. i = 0;
  92. j = 1;
  93.  
  94. while (j < nElements)
  95. {
  96. if (j + 1 < nElements && T[j + 1]> T[j]) j++;
  97. if (v >= T[j]) break;
  98. T[i] = T[j];
  99. i = j;
  100. j = 2 * j + 1;
  101. }
  102.  
  103. T[i] = v;
  104. }
  105. if(nElements<=0) { //usun element z listy
  106. T[0] = 0;
  107. nElements = 0;
  108. }
  109. }
  110. int heap_returnTopValue() {
  111. return T[0];
  112. }
  113. void heap_change_element( int v, int p)
  114. {
  115. //cout << "CHANGING IN BIG HEAP " << v << " with " << p << " index " << index << endl;
  116. int npom = nElements;
  117. for (int i = 0; i < npom; i++)
  118. {
  119. if (T[i] == v) {
  120. T[i] = p;
  121. break;
  122. }
  123. }
  124. }
  125. void heap_build() {
  126. int npom = nElements;
  127. int* pom = new int[nElements];
  128. for (int i = 0; i < npom; i++) {
  129. pom[i] = T[i];
  130. }
  131. for (int i = 0; i < npom; i++) {
  132. heap_pop(false);
  133. }
  134. for (int i = 0; i < npom; ++i) {
  135. heap_push(pom[i]);
  136. }
  137. //delete[] pom;
  138. }
  139.  
  140. };
  141.  
  142.  
  143. int main()
  144. {
  145. Heap heaps[1000];
  146. int n;
  147. cin >> n;
  148. for (int i = 0; i < n; ++i){
  149. char character;
  150. cin >> character;
  151. if (character == 'a') {
  152. int group;
  153. int value;
  154. cin >> group >> value;
  155. if (heaps[group].initialized == false) {
  156. heaps[group].initialized = true;
  157. heaps[group].initializeArray();
  158. }
  159. heaps[group].heap_push(value);
  160. }
  161. else if(character == 'e') {
  162. int group;
  163. cin >> group;
  164. heaps[group].heap_pop(true);
  165. }
  166. else if (character == 'p') {
  167. int group;
  168. cin >> group;
  169. heaps[group].printHeap();
  170. }
  171. else if (character == 'm') {
  172. int group1, group2;
  173. cin >> group1 >> group2;
  174. int el=heaps[group2].nElements;
  175. int pom = 0;
  176. for (int j = 0; j < el; ++j)
  177. {
  178. pom= heaps[group2].heap_returnTopValue();
  179. heaps[group2].heap_pop(false);
  180. heaps[group1].heap_push(pom);
  181. }
  182. }
  183. else if (character == 'i') {
  184. int group, value1, value2;
  185. cin >> group >> value1 >> value2;
  186. heaps[group].heap_change_element(value1, value2);
  187. heaps[group].heap_build();
  188. }
  189. }
  190. for (int i = 0; i < 1000; ++i) {
  191. if (heaps[i].initialized == true)
  192. heaps[i].clearMemory();
  193. }
  194. //return 0;
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement