https://www.acmicpc.net/submit/20440/28843659
오름차순 정렬 후 우선순위큐에 push하는 것까지 금방 접근했는데 그 뒤에 막혀서 한참 고민했다.
#include <iostream>
#include <functional>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
vector<pair<int, int>> vec;
pair<int, int> ans_range = { 0,0 };
int ans_size = 0;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int ent, ext;
cin >> ent >> ext;
vec.push_back({ ent,ext });
}
sort(vec.begin(), vec.end());
priority_queue<pair<int, int>,vector<pair<int,int>>, greater<pair<int,int>>> pq;
for (int i = 0; i < vec.size(); i++) {
while (!pq.empty() && pq.top().first <= vec[i].first) pq.pop();
pq.push({vec[i].second, vec[i].first});
if (pq.size() == ans_size && ans_range.second == vec[i].first) {
ans_range.second = pq.top().first;
}
else if (pq.size() > ans_size) {
ans_size = pq.size();
ans_range = { vec[i].first,pq.top().first };
}
}
cout << ans_size << '\n' << ans_range.first << ' ' << ans_range.second;
}
분명 어디선가 풀어봤던 문제다.
요즘 알고리즘에 소홀했더니 이 문제도 고전했다.
열심히 하자.