#include <cstdio>
#include <vector>
#include <queue>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <set>
#define ll long long
using namespace std;
int N, K;
vector<pair<int,int>> v;
vector<int> bag;
priority_queue<int> pq;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N >> K;
for(int i=0;i<N;i++)
{
int a,b;
cin >> a >> b;
v.push_back({a,b});
}
for(int i=0;i<K;i++)
{
int a;
cin >> a;
bag.push_back(a);
}
sort(bag.begin(), bag.end());
sort(v.begin(), v.end());
int idx=0;
ll result = 0;
for(int i=0;i<bag.size();i++)
{
while(idx < v.size() and v[idx].first <= bag[i])
pq.push(v[idx++].second);
if(!pq.empty())
{
result += pq.top();
pq.pop();
}
}
cout << result;
return 0;
}
- 핵심
가방
에 넣을 수 있어야 가격
이 비싸든 말든
의미
가 있다
--> 즉, 가방에 넣을 수 있는 모든 보석
을 고른 후 가장 비싼 보석
을 선택
하면 됨
그리디
+ 우선순위 큐
사용