Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- #include <ctime>
- #define _CRT_SECURE_NO_WARNINGS
- int * generate(int n)
- {
- int * arr = (int *)calloc(n, sizeof(int));
- for (int i = 0; i < n; ++i)
- {
- arr[i] = rand();
- }
- return arr;
- }
- void swap(int &a, int &b)
- {
- int t = a;
- a = b;
- b = t;
- }
- void siftup(int * heap, int i)
- {
- while (heap[i] > heap[(i - 1) / 2])
- {
- swap(heap[i], heap[(i - 1) / 2]);
- i = (i - 1) / 2;
- }
- }
- void siftdown(int * heap, int i, int n)
- {
- int left = 0, right = 0, j = 0;
- while (2 * i + 1 < n)
- {
- left = 2 * i + 1;
- right = 2 * i + 2;
- j = left;
- if (right < n && heap[right] > heap[left])
- j = right;
- if (heap[i] > heap[j])
- return;
- swap(heap[i], heap[j]);
- i = j;
- }
- }
- void add(int * heap, int i, int &n)
- {
- n++;
- heap[n - 1] = i;
- siftup(heap, n - 1);
- }
- int delete_max(int *heap, int &n)
- {
- int min = heap[0];
- heap[0] = heap[n - 1];
- n--;
- siftdown(heap, 0, n);
- return min;
- }
- int main()
- {
- int n = 0, h = 0, t = 0;
- srand(time(NULL));
- scanf("%d", &n);
- int * arr = generate(n);
- for (int i = 0; i < n; ++i)
- {
- add(arr, arr[i], h);
- }
- for (int i = n - 1; i > 0; --i)
- arr[i] = delete_max(arr, h);
- for (int i = 1; i < n; ++i)
- {
- if (arr[i - 1] > arr[i])
- {
- printf("ERROR");
- t++;
- break;
- }
- }
- if (!t)
- {
- printf("OK");
- }
- free(arr);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment