序列合并

#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,表示程序正常结束  
}

 

posted @ 2024-01-20 17:04  Boy^  阅读(17)  评论(0)    收藏  举报