반응형

https://www.acmicpc.net/problem/11286

 

11286번: 절댓값 힙

첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net

 

 

[ 문제풀이 ]

 

1. struct를 만들어 입력된 수와 절댓값을 저장합니다.

 

2. pq에 절댓값이 낮은 순으로 정렬하고, 같다면 수가 낮은 순으로 정렬합니다.

 

3. 0이 입력되면 pq에서 하나씩 뽑아가면서 출력합니다.

 

[ 소스 코드 ]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include<cstdio>
#include<queue>
#include<cmath>
 
using namespace std;
 
struct node {
    int num;
    int absolute;
};
 
struct cmp {
    bool operator()(node right, node left) {
        if (right.absolute == left.absolute) return left.num < right.num;
        return left.absolute < right.absolute;
    }
};
 
int main()
{
    priority_queue<node, vector<node>, cmp> pq;
    int N;
 
    scanf("%d"&N);
 
    for (int i = 0; i < N; i++) {
        int x;
        scanf("%d"&x);
        if (x != 0) {
            pq.push({ x,abs(x) });
        }
        else {
            if (!pq.empty()) {
                printf("%d\n", pq.top().num);
                pq.pop();
            }
            else {
                printf("%d\n"0);
            }
        }
    }
}
cs
반응형

+ Recent posts