题解 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;
}
posted @ 2022-03-19 19:34  wbs200  阅读(74)  评论(0)    收藏  举报