题解 AT2561 [ABC061C] Big Array
此题又是一个很好的 STL 模板题,可以当做P1097 [NOIP2007 提高组] 统计数字的后续练习。
对于此题来讲,其实如果想直接求第 \(K\) 小的数的话有些麻烦,并且很容易出错。对此我们可以采用一种桶排序的思路。我们使用 STL 中的 map,将数据全部加入 map 容器后统一使用 auto 将 map 扫一遍,将输入的 \(K\) 不断减掉即可。
#include <iostream>
#include <map>
using namespace std;
#define int long long
map<int, int> mp;
signed main()
{
int n;
long long k;
cin >> n >> k;
for (int i = 1; i <= n; i++)
{
int a, b;
cin >> a >> b;
mp[a] += b;
}
for (auto kv: mp)
{
k -= kv.second;
if (k <= 0)
{
cout << kv.first << endl;
break;
}
}
return 0;
}

浙公网安备 33010602011771号