๋น์ผ ์ฅฌ์ผ๋ฆฌ๋ถํฐ ๊ฐ๋ฐฉ์ ๋ด์์ผ ํ๋ค. ๊ทผ๋ฐ ์ด๋ ์ต๋ํ ํจ์จ์ ์ผ๋ก ๊ฐ๋ฐฉ์ ๋ด์์ผ ํ๋ค. ๋น์ผ ์์๋๋ก ์ ๋ ฌํ ๋ค์์ ์ฅฌ์ผ๋ฆฌ์ ๋ฌด๊ฒ์ ๊ฐ์ฅ ์ฐจ์ด๊ฐ ๋์ง ์๋ ๊ฐ๋ฐฉ์ ๋ด์ผ๋ ค๊ณ ํ๋๋ฐ ๊ทธ๋ ๊ฒ ๋๋ฉด ์์ 2์์ (2, 99)์ ๋ณด์์ด 2 ํฌ๊ธฐ์ ๊ฐ๋ฐฉ์ ๋ด๊ธฐ๊ฒ ๋๊ณ , (1, 65)์ ๋ณด์์ ๋ด์ ์ ์๊ฒ ๋๋ค.
๊ฒฐ๊ตญ ์ต๋ํ ๋ง์ ๋ณด์์ ๋ด๊ธฐ ์ํ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์๊ฐํด์ผ ํ๋ค. ๊ฐ๋ฐฉ ํ๋์๋ ๋ณด์์ ํ๋๋ฐ์ ๋ด์ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐฉ์ ๋ณด์์ ๋ด์ ๋, ๋ค๋ฅธ ๋ณด์๋ค์ด ๊ฐ๋ฐฉ์ ๋ค์ด๊ฐ ๊ธฐํ๋ฅผ ์ต๋ํ ๋ง์ด ์ค ์ ์๋ ๋ณด์์ ๊ฐ๋ฐฉ์ ๋ด์์ผ ํ๋ค.
๋ง์ฝ ๋ฌด๊ฒ๋ ์์๋ฐ ๊ฐ๊ฒฉ์ด ๋๊ฒ ๋๊ฐ๋ ๋ณด์์ ๊ฐ์ฅ ํฌ๊ธฐ๊ฐ ํฐ ๊ฐ๋ฐฉ์ ๋ด๊ฒ ๋๋ฉด, ์ดํ์ ๋ฌด๊ฒ๊ฐ ๋ฌด๊ฑฐ์ด ๋ณด์๋ค์ ๊ฐ๋ฐฉ์ ๋ด๊ธธ ๊ธฐํ๊ฐ ์์ ์ ์๋ค. ์์ ๊ฐ๋ฐฉ์ ๋ด๊ธธ ์ ์๋ ๋ณด์์ ํฐ ๊ฐ๋ฐฉ์ ๋ด๊ธธ ์ ์์ง๋ง, ํฐ ๊ฐ๋ฐฉ์๋ง ๋ด๊ธธ ์ ์๋ ๋ณด์๋ค์ ์์ ๊ฐ๋ฐฉ์ ๋ด๊ธธ ์ ์๋ค. ๊ฒฐ๊ตญ ์์ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ๋ณด์๋ค์ ์ต๋ํ ์์ ๊ฐ๋ฐฉ์ ๋ด์์ผ ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ๊ทธ๋ฆฌ๋ํ ํ์ด๊ฐ ๋๋ค.
ํฌ๊ธฐ๊ฐ n์ธ ๊ฐ๋ฐฉ์ ๋ณด์๋ค์ ๋ด์ ๋, ์ต๋ํ ๋น์ผ๊ฒ๋ถํฐ์ผ ๋ด์์ผ ํ๋๋ฐ ์ด๋ ๋ณด์ ๊ฐ์๋ ์ต๋ 30๋ง์ด๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ ์ ๋ ฌ๋ก ๊ตฌํ๊ฒ ๋๋ฉด ์ต์ ์ ๊ฒฝ์ฐ O(N^2)์ด ๋๊ธฐ ๋๋ฌธ์ ํ ์ ๋ ฌ์ ์ฌ์ฉํ๋ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํด์ ํด๋น ํฌ๊ธฐ์ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ๋ณด์๋ค ๊ฐ์ด๋ฐ ๊ฐ์ฅ ๋น์ผ ๋ณด์์ ์ฐพ์ ๋ด๋๋ค.
๋จผ์ ๋ณด์๋ค์ ๋ฌด๊ฒ ์์๋๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๊ณ , ๊ฐ๋ฐฉ๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ค. ์์ ๊ฐ๋ฐฉ์ ๋ด๊ธธ ์ ์๋ ๋ณด์๋ค๋ง ์ฐ์ ์์ ํ์ ๋ด๊ณ , ๊ทธ ์ค์์ ๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ๋ณด์์ ๊บผ๋ธ๋ค. ํด๋น ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
// ๋ณด์ ๋๋
package Baekjoon.Gold;
import java.io.*;
import java.util.*;
public class baekjoon_1202 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
long[][] jewelry = new long[N][2];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
jewelry[i][0] = Long.parseLong(st.nextToken());
jewelry[i][1] = -Long.parseLong(st.nextToken());
}
long[] bags = new long[K];
for (int i = 0; i < K; i++) {
bags[i] = Long.parseLong(br.readLine());
}
Arrays.sort(jewelry, (a, b) -> (int) (a[0] - b[0]));
Arrays.sort(bags);
long answer = 0;
int idx = 0;
PriorityQueue<long[]> pq = new PriorityQueue<>(Comparator.comparingLong(arr -> arr[1]));
for (int i = 0; i < K; i++) {
long bagWeight = bags[i];
while (idx < N && bagWeight >= jewelry[idx][0]) {
pq.add(jewelry[idx]);
idx++;
}
if (!pq.isEmpty()) {
answer -= pq.poll()[1];
}
}
System.out.println(answer);
}
}