11286번: 절댓값 힙
첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0�
www.acmicpc.net
직접 Comp 클래스를 만들어 연산자를 만들어 주어야 한다. 절댓값을 계산해서 같을 경우와 아닐 경우 리턴 값을 잘 생각해주자.
#include <cstdio>
#include <queue>
using namespace std;
int absf(int a){
if(a>0)
return a;
return -a;
}
class Comp{
public:
bool operator()(const int &a, const int &b){
if(absf(a)==absf(b))
return a>b;
return absf(a)>absf(b);
}
};
int main(void){
priority_queue <int, vector<int>, Comp> q;
int N, x;
scanf("%d", &N);
for(int i=0; i<N; i++){
scanf("%d", &x);
if(x==0){
if(q.empty())
printf("0\n");
else{
printf("%d\n", q.top());
q.pop();
}
}
else
q.push(x);
}
}
'BOJ 길라잡이' 카테고리의 다른 글
[C/C++ 백준 13305번] 주유소 (Silver 4) (0) | 2020.11.03 |
---|---|
[C/C++ 백준 11279번] 최대 힙 (Silver 2) (0) | 2020.10.14 |
[C/C++ 백준 1927번] 최소 힙 (Silver 1) (0) | 2020.10.14 |
[C/C++ 백준 11047번] 동전 0 (Silver 1) (0) | 2020.10.14 |
[C/C++ 백준 2293번] 동전 1 (Silver 1) (0) | 2020.10.13 |