1202

Created at : 2024-11-27 21:32
1202

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, K;
    cin >> N >> K;
    vector<pair<int, int>> Infos(N);    // first: Weight, second: Value
    for(int i = 0; i < Infos.size(); ++i)
    {
        cin >> Infos[i].first >> Infos[i].second;
    }

    vector<int> Bags(K);
    for(int i = 0; i < Bags.size(); ++i)
    {
        cin >> Bags[i];
    }

    sort(Infos.begin(), Infos.end(), [](pair<int, int> A, pair<int, int> B){ return A.first < B.first; });
    sort(Bags.begin(), Bags.end());

    priority_queue<int> PQ;
    int64_t Sum = 0;
    for(int i = 0, j = 0; i < Bags.size(); ++i)
    {
        while(j < Infos.size() && Bags[i] >= Infos[j].first)
        {
            PQ.push(Infos[j++].second);
        }

        if(!PQ.empty())
        {
            Sum += PQ.top();
            PQ.pop();
        }
    }
    
    cout << Sum;

    return 0;
}

유형