11286번: 절댓값 힙
첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
우선순위 큐를 불러올 때 우선순위를 작성자가 임의로 설정할 수 있도록 cmp 구조체를 첨부한다.
구조체에서 a,b는 각각 부모, 자식 노드를 의미하며 return 값이 참이면 노드간의 swap을 진행한다.
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
|
#include<bits/stdc++.h>
using namespace std;
struct cmp{
bool operator()(int a, int b){
if(abs(a) == abs(b)) return a > b;
return abs(a) > abs(b);
}
};
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
priority_queue<int, vector<int>, cmp> pq;
int n;
cin >> n;
int cmd;
for(int i = 0; i < n; i++){
cin >> cmd;
if(cmd == 0){
if(pq.empty()) cout << "0\n";
else{
cout << pq.top() << "\n";
pq.pop();
}
}
else pq.push(cmd);
}
return 0;
}
|
cs |