给定 M 个数据,每个数据为 A 个重复的 B 。要求每读入一次数据,最多输出当前已读数据中最大的 N 个值。
为了能够快速得到最大的值,我们可以使用大根堆来对数据进行存储。
什么是大根堆?
其学名是优先队列。具体表现形式(或者说我们自己手动模拟的形式)是一颗二叉树,每个结点最多有两个儿子,且对于任意一个结点,都符合:该结点任意儿子的值,都比该结点的值小。因此,堆顶(或者说二叉树的根节点)就是所有数中最大的值。
小红面临一个挑战,需要从海量的网络数据中筛选出繁忙时段的数据。考虑到数据规模庞大,小红无法对所有数据进行排序,然后选择前N个最大值作为繁忙时段的数据。聪明的小红想到了使用一个固定大小的优先级队列来筛选数据。为了简化场景,我们将海量网络数据表示为一个正整数集合,并且仅需选择N个最大的正整数作为结果。对于每批输入数据,小红将输出一行结果,将这N个正整数按照顺序拼接成一行字符串进行输出。
输入第一行为正整数N和M,N为忙时个数,M为输入的数据行数,(1 ≤ N ≤ 24 ,1 ≤ M ≤ 1000)
接下来输入M行,每行两个正整数A,B,以空格分隔,表示有A个重复的正整数B,1 ≤ A,B ≤ 2147483647 。
输出每增加一批数据对应的队列结果,直接将队列里的所有数据集从大到小拼接成字符串输出.
输入
24 3
11 5
2 1
18 7
输出
55555555555
5555555555511
777777777777777777555555
解释
保留24个忙时数据
第一次输入11个5,则队列输出为55555555555
第二次输入2个1,则队列输出为5555555555511
第三次输入18个7,则队列输出为777777777777777777555555