Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- struct Item
- {
- int key;
- int priority;
- };
- struct PrQueue
- {
- int size;
- Item* queue;
- } queue;
- void swap(Item &a, Item &b)
- {
- Item t = a;
- a = b;
- b = t;
- }
- void siftup(Item * heap, int i)
- {
- while (heap[i].priority < heap[(i - 1) / 2].priority)
- {
- swap(heap[i], heap[(i - 1) / 2]);
- i = (i - 1) / 2;
- }
- }
- void siftdown(Item * 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].priority < heap[left].priority)
- j = right;
- if (heap[i].priority < heap[j].priority)
- return;
- swap(heap[i], heap[j]);
- i = j;
- }
- }
- void add(Item * heap, Item i, int &n)
- {
- n++;
- heap[n - 1] = i;
- siftup(heap, n - 1);
- }
- int delete_min(Item *heap, int &n)
- {
- int min = heap[0].key;
- heap[0] = heap[n - 1];
- n--;
- siftdown(heap, 0, n);
- return min;
- }
- int size(PrQueue name)
- {
- return name.size;
- }
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- queue.queue = (Item*)malloc(n * sizeof(Item));
- queue.size = 0;
- for (int i = 0; i < n; i++)
- {
- scanf("%d", &queue.queue[i].key);
- scanf("%d", &queue.queue[i].priority);
- add(queue.queue, queue.queue[i], queue.size);
- }
- printf("%d\n", delete_min(queue.queue, queue.size));
- printf("%d\n", size(queue));
- free(queue.queue);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment