11000๋ฒ: ๊ฐ์์ค ๋ฐฐ์
์ฒซ ๋ฒ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 200,000) ์ดํ N๊ฐ์ ์ค์ Si, Ti๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ Si < Ti ≤ 109)
www.acmicpc.net
โจ ๋ด ์์ค ์ฝ๋
#include<iostream>
#include <queue>
#include <functional>
#include <algorithm>
using namespace std;
class cmp
{
public:
bool operator()(pair<int, int> pq1, pair<int, int> pq2)
{
if (pq1.first == pq2.first)
{
return pq1.second > pq2.second;
}
else
{
return pq1.first > pq2.first;
}
}
};
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> pq;
priority_queue<int, vector<int>, greater<int>> p;
int N,s,t;
cin >> N;
while (N--) {
cin >> s >> t;
pq.push(make_pair(s, t));
}
p.push(pq.top().second);
pq.pop();
while (!pq.empty()) {
if (p.top() <= pq.top().first) {
p.pop();
p.push(pq.top().second);
pq.pop();
}
else {
p.push(pq.top().second);
pq.pop();
}
}
cout << p.size();
return 0;
}
๐ ๋ฌธ์ ํ์ด
priority_queue(์ฐ์ ์์ ํ)๋ฅผ ์ด์ฉํ์ฌ ํ์๋ค
#include <functional>์ greater<int>์์ ๋ฐ์ํ๋ ์๋ฌ๋ฅผ ์์ ์ฃผ๊ธฐ ์ํด ์ฌ์ฉ
pq์ ์์ ์๊ฐ๊ณผ ์ข ๋ฃ ์๊ฐ์ ์์ผ๋ก ๋ฃ์ด์ฃผ๋ฉด, ์๋์ผ๋ก ์ ๋ ฌ์ด ๋๋ค

p์ pq์ ๊ฐ์ฅ ์์ ์์(์์์๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅด๊ณ , ์ข ๋ฃ ์๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ)์ ์ข ๋ฃ ์๊ฐ์ ๋ฃ์ด์ค๋ค

p์ ๊ฐ์ฅ ๋น ๋ฅธ ์ข ๋ฃ ์๊ฐ์ด ํ์ฌ pq์ ๊ฐ์ฅ ๋น ๋ฅธ ์์ ์๊ฐ๋ณด๋ค ํฌ๋ฉด
์ด์ด์ ์์ ์ ํ ์ ์๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์์ค์ ํ๋ ๋ ๋ง๋ค์ด์ผ ๋๋ค
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ p์ ๊ฐ์ ๋ฃ์ด์ค ๋ค, pq๋ฅผ ์ญ์ ํ๋ค

p์ ๊ฐ์ฅ ๋น ๋ฅธ ์ข ๋ฃ ์๊ฐ์ด ํ์ฌ pq์ ๊ฐ์ฅ ๋น ๋ฅธ ์์ ์๊ฐ ๋ณด๋ค ์์ผ๋ฉด
์ด์ด์ ์์ ์ ํ ์ ์๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์
p์ ์ฒซ๋ฒ์งธ ์์(๊ฐ์ฅ ๋น ๋ฅธ ์ข ๋ฃ ์๊ฐ)์ ์ญ์ ํ๊ณ , pq์ ๊ฐ์ฅ ๋น ๋ฅธ ์์ ์๊ฐ์ ์ข ๋ฃ ์๊ฐ(pq.top().second)์ ๋ฃ์ด์ค๋ค
๊ทธ๋ฆฌ๊ณ ํด๋น ๊ฐ์๋ ์ฌ์ฉ ํ์ผ๋ฏ๋ก pq์์ ์ญ์ ํด์ค๋ค (pq.pop())

p์ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ฉด ๊ฐ์์ค์ด ๊ฐ์๋ฅผ ์ป์ ์ ์๋ค
โญ ๋ฌธ์ ํ์ด ๊ฒฐ๊ณผ
