https://www.acmicpc.net/problem/1655
1655번: 가운데를 말해요
첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1
www.acmicpc.net
백준 2696번과 같은 문제이다. 다만 짝수일때 중앙값은 두개의 값중 작은것으로 출력해야한다. ex) 1 2 3 4일때 2 3중 작은게 중앙값
#include <bits/stdc++.h>
#define l long long
#define INF 2e9
#define p pair<int,int>
using namespace std;
priority_queue<int,vector<int>,greater<>> MinQ;
priority_queue<int,vector<int>,less<>> MaxQ;
int main() {
ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int n,num,temp;
cin >> n;
for(int i=1;i<=n;i++){
cin >> num;
if(i % 2 == 0) temp = MaxQ.top();
if(MinQ.empty() && MaxQ.empty()) MaxQ.push(num);
else if(MaxQ.size() > MinQ.size()){
if(MaxQ.top() > num){
MaxQ.push(num);
MinQ.push(MaxQ.top());MaxQ.pop();
}
else MinQ.push(num);
}
else if(MaxQ.size() == MinQ.size()){
if(MaxQ.top() < num){
MinQ.push(num);
MaxQ.push(MinQ.top());MinQ.pop();
}
else MaxQ.push(num);
}
if(i % 2 == 0) cout << min(temp,MaxQ.top()) << "\n";
else cout << MaxQ.top() << "\n";
}
}
'baekjoon' 카테고리의 다른 글
2357번 최솟값과 최댓값 (0) | 2022.03.21 |
---|---|
10868번 최솟값 (0) | 2022.03.21 |
11505번 구간 곱 구하기 (0) | 2022.03.21 |
2042번 구간 합 구하기 (0) | 2022.03.21 |
2696번 중앙값 구하기 (0) | 2022.03.21 |