1 #include <iostream> // 引入输入输出流库
2 #include <queue> // 引入队列库
3 #include <algorithm> // 引入算法库
4 using namespace std; // 使用标准命名空间
5
6 struct node { // 定义一个结构体,表示节点
7 int a; // 节点的a属性
8 int b; // 节点的b属性
9 int num; // 节点的num属性
10 bool operator < (const node other) const { // 重载小于运算符,用于比较两个节点的大小
11 return num > other.num; // 返回num是否大于other的num
12 }
13 };
14
15 priority_queue<node> pq; // 定义一个优先队列,元素类型为node
16 int A[50001], B[50001]; // 定义两个数组A和B,长度为50001
17
18 int main() { // 主函数
19 int n; // 定义一个整数n
20 node temp; // 定义一个临时节点temp
21 cin >> n; // 从输入流中读取一个整数n
22 for (int i = 0; i < n; i++) { // 循环n次
23 cin >> A[i]; // 从输入流中读取一个整数并存入数组A的第i个元素
24 }
25 for (int i = 0; i < n; i++) { // 循环n次
26 cin >> B[i]; // 从输入流中读取一个整数并存入数组B的第i个元素
27 }
28 sort(A, A + n); // 对数组A进行排序
29 sort(B, B + n); // 对数组B进行排序
30 for (int i = 0; i < n; i++) { // 循环n次
31 temp.a = i; // 将i赋值给temp的a属性
32 temp.b = 0; // 将0赋值给temp的b属性
33 temp.num = A[i] + B[0]; // 计算A[i]和B[0]的和并赋值给temp的num属性
34 pq.push(temp); // 将temp压入优先队列pq
35 }
36 for (int i = 0; i < n; i++) { // 循环n次
37 temp = pq.top(); // 取出优先队列pq的顶部元素并赋值给temp
38 pq.pop(); // 弹出优先队列pq的顶部元素
39 if (i != n - 1) { // 如果i不等于n-1
40 cout << temp.num << " "; // 输出temp的num属性和一个空格
41 } else { // 如果i等于n-1
42 cout << temp.num << endl; // 输出temp的num属性并换行
43 }
44 if (temp.b != n - 1) { // 如果temp的b属性不等于n-1
45 temp.b++; // 将temp的b属性加1
46 temp.num = A[temp.a] + B[temp.b]; // 重新计算A[temp.a]和B[temp.b]的和并赋值给temp的num属性
47 pq.push(temp); // 将temp压入优先队列pq
48 }
49 }
50 return 0; // 返回0,表示程序正常结束
51 }