본문 바로가기

알고리즘 문제 풀이/Baekjoon

14235 - 크리스마스 선물

반응형
SMALL

 

 

14235번: 크리스마스 선물

크리스마스에는 산타가 착한 아이들에게 선물을 나눠준다. 올해도 산타는 선물을 나눠주기 위해 많은 노력을 하고 있는데, 전세계를 돌아댕기며 착한 아이들에게 선물을 나눠줄 것이다. 하지만

www.acmicpc.net

 

#include <stdio.h>

int N;
int A;

const int LN = 5e5 + 10;

int maxComp(int x, int y) { return x > y; }
void swap(int& x, int& y) { int z = x; x = y; y = z; }

struct PQ {
  int hn;
  int heap[LN];
  int (*comp)(int, int);

  void init() {
    hn = 0;
    comp = maxComp;
  }

  void push(int x) {
    heap[++hn] = x;

    for (int c = hn; c > 1; c /= 2) {
      if (comp(heap[c], heap[c / 2])) { swap(heap[c / 2], heap[c]); }
      else break;
    }
  }

  int pop() {
    swap(heap[1], heap[hn--]);

    for (int c = 2; c <= hn; c *= 2) {
      if (c < hn && comp(heap[c + 1], heap[c]))  { ++c; }
      if (comp(heap[c], heap[c / 2])) { swap(heap[c / 2], heap[c]); }
      else break;
    }

    return heap[hn + 1];
  }
} maxpq;

void init() {
  maxpq.init();

  scanf("%d", &N);
}

void calculateAndPrint() {
  for (int n = 0; n < N; ++n) {
    scanf("%d", &A);

    if (A) {
      int t;

      for (int a = 0; a < A; ++a) {
        scanf("%d", &t);

        maxpq.push(t);
      }
    } else {
      printf("%d\n", maxpq.hn ? maxpq.pop() : -1);
    }
  }
}

int main(void) {
  // freopen("14235.txt", "r", stdin);

  init();

  calculateAndPrint();

  return 0;
}

 

이제 끝내자 힙

반응형
LIST

'알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글

1306 - 달려라 홍준  (1) 2023.12.21
1715 - 카드 정렬하기  (1) 2023.12.21
1417 - 국회의원 선거  (1) 2023.12.20
15903 - 카드 합체 놀이  (1) 2023.12.20
11931 - 수 정렬하기 4  (0) 2023.12.19