#include<cstdio> // 引入cstdio库,用于输入输出流操作 #include<queue> // 引入queue库,用于使用优先队列数据结构 using namespace std; // 使用命名空间std,以便简化代码书写 int a[100005]={}, b[100005]={}, to[100005]={},i, n; // 声明并初始化数组a、b、to和变量i、n priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > >q; // 声明一个优先队列q,用于存储pair类型的元素,队列中的元素按降序排列 int main() // 主函数,程序的入口点 { scanf("%d", &n); // 从标准输入读取一个整数,并存储到变量n中 for (i = 1; i <= n; i++) // 循环n次,每次读取一个整数 scanf("%d", &a[i]); // 从标准输入读取一个整数,并存储到数组a的第i个位置 for (i = 1; i <= n; i++) // 再次循环n次,进行后续的操作 { scanf("%d", &b[i]); to[i] = 1; // 从标准输入读取一个整数,并存储到数组b的第i个位置,同时将to[i]设为1 q.push(pair<int, int>(a[1] + b[i], i)); // 将一个pair类型的元素插入到优先队列q中,该元素的first值为a[1] + b[i],second值为i } while (n--) // 当n大于0时,循环执行以下操作 { printf("%d ", q.top().first); // 输出队列q顶部的元素的first值(即a[1] + b[i]的值) i = q.top().second; q.pop(); // 获取队列q顶部的元素的second值(即i),并从队列中删除该元素 q.push(pair<int, int>(a[++to[i]] + b[i], i)); // 将一个pair类型的元素插入到优先队列q中,该元素的first值为a[to[i]+1] + b[i],second值为i } return 0; // 返回0,表示程序正常结束 }
标签:队列,值为,元素,合并,pair,second,序列,first From: https://www.cnblogs.com/iswuyi/p/17976765