【3】有序表的最小和(优先队列)
有序表的最小和
Description
给出两个长度为n的有序表A和B,在A和B中各任取一个元素,可以得到n^2个和,求这些和中最小的n个
Input
第一行包含一个整数n(n≤400000n≤400000)
第二行与第三行分别有n个整数,分别代表有序表A和B,整数之间由一个空格隔开,大小在长整数范围之内,保证有序表的数据单调递增。
Output
输出共n行,每行一个整数,第i行为第i小的和,数据保证在长整数范围之内
Samples
Input
1 | 3 |
Output
1 | 3 |
AC CODE:
1 |
|
解析:
同样是很有趣的一道题。
假设有a,b两个数组,首先我们知道最小的和必然是a[1] + b[1]
那么第二小的是什么呢?
可能是a[1] + b[2] 也可能是 a[2] + b[1] 做成表格是这样的:
假设每个数组有四项,第一小的就要从第一列找到最小的一个输出,然后被选中的向后推移一项继续比较每一行被选中的。
最小的只能从这n个中产生。
模拟一下过程就是code中那样。
值得一提的是优先队列制定排序的规则,这里用的是在结构体中重载运算符,之后会专门做一篇博客解释这个。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sky的博客!