※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 23090번 문제인 난민이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/23090
23090번: 난민
문제의 답을 공백으로 구분하여
www.acmicpc.net
난민이 어떤
아래는 제출한 소스코드이다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef long long ll;
int N, X;
priority_queue<int> L;
priority_queue<int, vector<int>, greater<>> R;
ll lsum, rsum, xtotal;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
L.push(-1000000007), R.push(1000000007);
cin >> N;
while (N--) {
cin >> X;
xtotal += abs(X);
cin >> X;
if (X < R.top()) {
L.push(X);
lsum += X;
if (L.size() == R.size() + 2) {
lsum -= L.top();
rsum += L.top();
R.push(L.top());
L.pop();
}
}
else {
R.push(X);
rsum += X;
if (R.size() == L.size() + 2) {
rsum -= R.top();
lsum += R.top();
L.push(R.top());
R.pop();
}
}
if (L.size() == R.size()) cout << L.top() << ' ' << xtotal + (ll)L.top() * (L.size() - 1) - lsum + rsum - (ll)L.top() * (R.size() - 1);
else if (L.size() > R.size()) cout << L.top() << ' ' << xtotal + (ll)L.top() * (L.size() - 1) - lsum + rsum - (ll)L.top() * (R.size() - 1);
else cout << R.top() << ' ' << xtotal + (ll)R.top() * (L.size() - 1) - lsum + rsum - (ll)R.top() * (R.size() - 1);
cout << '\n';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 7827 // C++] Transitive Closure (0) | 2024.04.06 |
---|---|
[BOJ 14156 // C++] Binarni (0) | 2024.04.05 |
[BOJ 17262 // C++] 팬덤이 넘쳐흘러 (0) | 2024.04.03 |
[BOJ 7694 // C++] Triangle (0) | 2024.04.02 |
[BOJ 15330 // C++] Parallel Lines (0) | 2024.04.01 |