传送门


解题思路

首先读入a、b数组后,sort一遍(从小到大),然后把a[1]+b[1],a[2]+b[1],a[3]+b[1]……a[n]+b[1]全部加入一个优先队列q(小根堆)。

然后从一到n循环,每一次取出队列中的最小的元素(假设是a[i]+b[j]),输出数值,然后把数值修改为a[i]+b[j+1],存入队列。

为什么呢?

很显然,我们把所有可能的情况列成一张表:

a[1]+b[1],a[2]+b[1],a[3]+b[1],……,a[n]+b[1];

a[1]+b[2],a[2]+b[2],a[3]+b[2],……,a[n]+b[2];

…………………………………………………………;

a[1]+b[n],a[2]+b[n],a[3]+b[n],……,a[n]+b[n]。

很显然,在这张表中,对于每一个数都一定小于它右下方的所有的数。

换一种说法,就是在第[i,j]个数为成为当前最小值时,它右下方的数不可能成为当前最小值。

所以只有在第[i,j]个数成为当前最小值时,把第[i+1][j]加入队列,继续比较。(也就是纵向更新)。

AC代码

 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
const int maxn=;
int n,a[maxn],b[maxn];
struct node{
int ans,bb;
bool operator < (const node &x)const{
return ans>x.ans;
}
};
priority_queue<node> q;
int main()
{
cin>>n;
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=n;i++) cin>>b[i];
sort(a+,a+n+);
sort(b+,b+n+);
for(int i=;i<=n;i++){
node x;
x.ans=a[i]+b[];
x.bb=;
q.push(x);
}
for(int i=;i<=n;i++){
node now=q.top();
q.pop();
cout<<now.ans<<" ";
now.bb++;
now.ans=now.ans+b[now.bb]-b[now.bb-];
q.push(now);
}
return ;
}

洛谷 P1631 序列合并(优先队列)的更多相关文章

  1. 洛谷P1631 序列合并

    P1631 序列合并 236通过 657提交 题目提供者xmyzwls 标签堆 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 为什么不行? 题目描述 有两个长度都是N的序列A和B,在A和B中 ...

  2. 洛谷 - P1631 - 序列合并 - 堆

    https://www.luogu.org/problemnew/show/P1631 序列a中每个数首先都和序列b中的最小元素配对(虽然好像不是很必要这么早插进来?) 每次从堆顶取出最小的和输出答案 ...

  3. 洛谷 P1631 序列合并

    题意简述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个. 题解思路 大根堆,先存入n个和,再比较大小,改变堆中元素. 代码 #include & ...

  4. 洛谷2085最小函数值(minval) + 洛谷1631序列合并

    题目描述 有n个函数,分别为F1,F2,-,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个). ...

  5. 洛谷P1880 石子合并(区间DP)(环形DP)

    To 洛谷.1880 石子合并 题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1 ...

  6. P1631 序列合并

    P1631 序列合并 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2N2个和,求这N^2N2个和中最小的N个. 对于100%的数据中,满足1<=N<=100000. ...

  7. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  8. [洛谷P2127] 序列排序

    洛谷题目链接:序列排序 题目描述 小C有一个N个数的整数序列,这个序列的中的数两两不同.小C每次可以交换序列中的任意两个数,代价为这两个数之和.小C希望将整个序列升序排序,问小C需要的最小代价是多少? ...

  9. 洛谷P4891 序列 || 膜法阵,魔法阵

    https://www.luogu.org/problemnew/show/P4891 一道几乎一样的题http://210.33.19.103/contest/1130/problem/3 题面ht ...

随机推荐

  1. ORACLE复杂查询之子查询

    子查询分为两类:标准子查询和相关子查询. 一.标准子查询:子查询先于主查询独立执行,返回明确结果供主查询使用. 子查询只执行一次,不依赖于主查询. 例如: 其中子查询能够返回结果:2450.所以断定其 ...

  2. Raspberry Pi3驱动Oled ssh1106屏

    Raspberry Pi3可以直接使用GPIO接口驱动OLED屏 一.接线 根据网上随便找的图可以看到树莓派3的GPIO接口引脚顺序 PS:26pin的GPIO为前26针 根据OLED屏的引脚说明,如 ...

  3. BZOJ 4821: [Sdoi2017]相关分析 线段树 + 卡精

    考试的时候切掉了,然而卡精 + 有一个地方忘开 $long long$,完美挂掉 $50$pts. 把式子化简一下,然后直接拿线段树来维护即可. Code: // luogu-judger-enabl ...

  4. 2019hdu多校 AND Minimum Spanning Tree

    题目链接:Click here 题目大意:两个点之间的边权为编号按位与的值,求最小生成树,方案要字典序最小 Solution: 一道不难的构造题,每个点连向他取反后的lowbit值,这样边权为0,若l ...

  5. 2019hdu多校 Fansblog

    Problem Description Farmer John keeps a website called 'FansBlog' .Everyday , there are many people ...

  6. Jenkins部署从节点

    由于jenkins上承载项目太多,需要专门的节点来执行需要构建的操作. 参考:https://www.cnblogs.com/lxs1314/p/7551309.html job仅使用绑定的slave ...

  7. SpringBoot,用200行代码完成一个一二级分布式缓存

    缓存系统的用来代替直接访问数据库,用来提升系统性能,减小数据库复杂.早期缓存跟系统在一个虚拟机里,这样内存访问,速度最快. 后来应用系统水平扩展,缓存作为一个独立系统存在,如redis,但是每次从缓存 ...

  8. legend3---3、lavarel页面post请求错误之后跳转

    legend3---3.lavarel页面post请求错误之后跳转 一.总结 一句话总结: 控制器:return back()->withInput()->with('error','验证 ...

  9. case when then else end 累加

    表结构 id(pk) satisfy(满意,一般,不满意) 一条语句查询 总数 各satisfy总数 SELECT count(*) AS 总数, count( CASE satisfy WHEN ' ...

  10. 【Linux 应用编程】基础知识

    错误提示 Linux 提供的系统调用API,通常会在失败的时候返回 -1.如果想获取更多更详细的报错信息,需要借助全局变量 errno 和 perror 函数: #include <stdio. ...