반응형
SMALL
힙 정렬 짜고
중복 체크하면 끝
#include <stdio.h>
const int LM = 1e5;
int N;
int R[LM];
int r;
void swap(int& x, int & y) { int z = x; x = y; y = z; }
int maxComp(int x, int y) { return x > y; }
int minComp(int x, int y) { return x < y; }
struct PQ {
int hn;
int heap[LM + 10];
int (*comp)(int, int);
void init(bool flag) {
hn = 0;
comp = flag ? minComp : maxComp;
}
void push(int n) {
heap[++hn] = n;
for (int c = hn; c > 1; c /= 2) {
if (comp(heap[c], heap[c/2])) {
swap(heap[c], heap[c / 2]);
} 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], heap[c / 2]);
} else {
break;
}
}
return heap[hn + 1];
}
} pq;
void init() {
scanf("%d", &N);
for (int n = 0; n < N; ++n) {
int t;
scanf("%d", &t);
pq.push(t);
}
}
void print() {
R[r] = pq.pop();
int p;
while (pq.hn) {
p = pq.pop();
if (R[r] != p) {
R[++r] = p;
}
}
for (int i = 0; i <= r; ++i) {
printf("%d ", R[i]);
}
}
int main(void) {
// freopen("10867.txt", "r", stdin);
pq.init(1);
init();
print();
return 0;
}
삼성아 고마워 !
반응형
LIST
'알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글
15903 - 카드 합체 놀이 (1) | 2023.12.20 |
---|---|
11931 - 수 정렬하기 4 (0) | 2023.12.19 |
10808 - 알파벳 갯수 (0) | 2023.12.18 |
2641 - 다각형 그리기 (1) | 2023.12.18 |
시간 복잡도 느린 정렬 모음 - python (0) | 2023.06.16 |