
우선순위 큐
데드라인과 컵라면 수를 받는 벡터를 생성하여 정렬한다. 정렬 기준은 기본 오름차순이다.
오름차순의 우선순위큐를 받아 일단 컵라면 수들을 담는다. 단 현재 데드라인 보다 우선순위큐의 사이즈가 큰 경우가 나타난다면 현재까지의 숙제가운데 어떠한 것을 포기해야한다는 뜻이며, 이때 가장 적게 받는 컵라면 수를 빼도록 하자.
남아있는 우선순위 큐의 총 수가 최대로 받을 수 있는 컵라면의 수이다.
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
priority_queue<int, vector<int>, greater<int>> pq;
int N, ret;
vector<pair<int, int>> v;
void input() {
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> N;
    int a, b;
    for (int i = 0; i < N; i++) {
        cin >> a >> b;
        v.push_back({a, b});
    }
    sort(v.begin(), v.end());
}
void solve() {
    for (int i = 0; i < v.size(); i++) {
        pq.push(v[i].second);
        if (pq.size() > v[i].first) pq.pop();
    }
    while (!pq.empty()) {
        ret += pq.top();
        pq.pop();
    }
}
void output() {
    cout << ret;
}
int main() {
    input();
    solve();
    output();
}