BOJ 1202. 보μ λλ
πββοΈ[Gold II] 보μ λλ - 1202
μ±λ₯ μμ½
λ©λͺ¨λ¦¬: 8740 KB, μκ°: 156 ms
λΆλ₯
μλ£ κ΅¬μ‘°, 그리λ μκ³ λ¦¬μ¦, μ°μ μμ ν, μ λ ¬
μ μΆ μΌμ
2024λ 3μ 12μΌ 12:17:20
λ¬Έμ μ€λͺ
μΈκ³μ μΈ λλ μλμ΄λ 보μμ μ νΈκΈ°λ‘ κ²°μ¬νλ€.
μλμ΄κ° νΈ λ³΄μμ μλ 보μμ΄ μ΄ Nκ° μλ€. κ° λ³΄μμ λ¬΄κ² Miμ κ°κ²© Viλ₯Ό κ°μ§κ³ μλ€. μλμ΄λ κ°λ°©μ Kκ° κ°μ§κ³ μκ³ , κ° κ°λ°©μ λ΄μ μ μλ μ΅λ 무κ²λ Ciμ΄λ€. κ°λ°©μλ μ΅λ ν κ°μ 보μλ§ λ£μ μ μλ€.
μλμ΄κ° νμΉ μ μλ 보μμ μ΅λ κ°κ²©μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ Nκ³Ό Kκ° μ£Όμ΄μ§λ€. (1 β€ N, K β€ 300,000)
λ€μ Nκ° μ€μλ κ° λ³΄μμ μ 보 Miμ Viκ° μ£Όμ΄μ§λ€. (0 β€ Mi, Vi β€ 1,000,000)
λ€μ Kκ° μ€μλ κ°λ°©μ λ΄μ μ μλ μ΅λ λ¬΄κ² Ciκ° μ£Όμ΄μ§λ€. (1 β€ Ci β€ 100,000,000)
λͺ¨λ μ«μλ μμ μ μμ΄λ€.
μΆλ ₯
첫째 μ€μ μλμ΄κ° νμΉ μ μλ 보μ κ°κ²©μ ν©μ μ΅λκ°μ μΆλ ₯νλ€.
πνμ΄
μ°μ μμ νλ₯Ό μμ©ν λ¬Έμ μ΄λ€.
int n, k;
const int MAX = 300010;
pair<int, int> jewerly[MAX];
int bag[MAX];
priority_queue<int, vector<int>, less<int>> q;
void solve()
{
cin >> n >> k;
for (int i = 0; i < n; ++i)
{
cin >> jewerly[i].first >> jewerly[i].second;
}
for (int i = 0; i < k; ++i)
{
cin >> bag[i];
}
sort(jewerly, jewerly + n);
sort(bag, bag + k);
int idx = 0;
long long ret = 0;
for (int i = 0; i < k; ++i)
{
// qμ κ°λ°©μ 무κ²κ° λλ€λ©΄ λ€ μ§μ΄ λ£κΈ°
while (idx < n && bag[i] >= jewerly[idx].first)
{
q.push(jewerly[idx].second);
idx++;
}
// κ·Έ μ€ κ°μ₯ λΉμΌκ±°λ₯Ό κ°λ°©μ λ£κΈ°
// κ°λ°© νλ λΉ νλμ 보μμ΄ λ€μ΄κ°λ€.
if (q.empty() == false)
{
ret += q.top();
q.pop();
}
}
cout << ret;
}
πμ 체 μ½λ
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <queue>
using namespace std;
int n, k;
const int MAX = 300010;
pair<int, int> jewerly[MAX];
int bag[MAX];
priority_queue<int, vector<int>, less<int>> q;
void solve()
{
cin >> n >> k;
for (int i = 0; i < n; ++i)
{
cin >> jewerly[i].first >> jewerly[i].second;
}
for (int i = 0; i < k; ++i)
{
cin >> bag[i];
}
sort(jewerly, jewerly + n);
sort(bag, bag + k);
int idx = 0;
long long ret = 0;
for (int i = 0; i < k; ++i)
{
while (idx < n && bag[i] >= jewerly[idx].first)
{
q.push(jewerly[idx].second);
idx++;
}
if (q.empty() == false)
{
ret += q.top();
q.pop();
}
}
cout << ret;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
freopen("input.txt", "rt", stdin);
solve();
return 0;
}