【Luogu P1631】序列合并】的更多相关文章

题目 开一个堆,先把所有\(a[i]+b[1]\)压进优先队列. 然后每次把最小的取出来,把对应的\(a[i]\)的下一个\(b[j]\)拿出来加进去. #include<bits/stdc++.h> using namespace std; namespace IO { char ibuf[(1<<21)+1],obuf[(1<<21)+1],st[15],*iS,*iT,*oS=obuf,*oT=obuf+(1<<21); inline char Get…
P1631 序列合并 236通过 657提交 题目提供者xmyzwls 标签堆 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 为什么不行? 题目描述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个. 输入输出格式 输入格式: 第一行一个正整数N: 第二行N个整数Ai,满足Ai<=Ai+1且Ai<=10^9; 第三行N个整数Bi, 满足Bi<=Bi+1且Bi<=10^9. [数据规模] 对于50%的数据中,满足1<…
P1631 序列合并 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2N2个和,求这N^2N2个和中最小的N个. 对于100%的数据中,满足1<=N<=100000. 思路巧妙,直接看代码 #include <cstdio> #include <algorithm> #include <iostream> #include <queue> #include <cstring> #include <algori…
https://www.luogu.org/problemnew/show/P1631 序列a中每个数首先都和序列b中的最小元素配对(虽然好像不是很必要这么早插进来?) 每次从堆顶取出最小的和输出答案,然后尝试为这个ai配对下一个bj,要是没有的话--说明都是他一个人贡献完了. #include<bits/stdc++.h> using namespace std; typedef long long ll; int n; int a[100005]; int b[100005]; struc…
https://www.luogu.org/problem/show?pid=1631 题目描述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个. 输入输出格式 输入格式: 第一行一个正整数N: 第二行N个整数Ai,满足Ai<=Ai+1且Ai<=10^9; 第三行N个整数Bi, 满足Bi<=Bi+1且Bi<=10^9. [数据规模] 对于50%的数据中,满足1<=N<=1000: 对于100%的数据中,满足1<…
题意简述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个. 题解思路 大根堆,先存入n个和,再比较大小,改变堆中元素. 代码 #include <cstdio> #include <algorithm> using namespace std; int n, a[100001], b[100001], ans[100001]; int cnt, heap[100001]; void up(int x); void down(in…
priority_queue的使用,注意 a[1]+b[1],a[1]+b[2],a[1]+b[3],a[1]+b[4].......a[1]+b[n] a[2]+b[1]......... .. a[n]+b[1].......a[n]+b[n] 先放入每一行的第1个,a代表行,b代表列,弹出的值在哪一行,再新加入这一行的下一个元素 类似cdq减少维度 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=…
传送门 解题思路 首先读入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…
P1631 序列合并 题目描述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N2个和,求这N2个和中最小的N个. 输入输出格式 输入格式: 第一行一个正整数N: 第二行N个整数Ai​, 满足Ai​≤Ai+1​且Ai​≤109; 第三行N个整数Bi​, 满足Bi​≤Bi+1​且Bi​≤109. 输出格式: 输出仅一行,包含N个整数,从小到大输出这N个最小的和,相邻数字之间用空格隔开. 输入输出样例 输入样例#1: 复制 3 2 6 6 1 4 8 输出样例#1: 复制 3 6 7…
Luogu P1631 题意很好懂,不作分析 很容易想出一个解法是求出每一个和,排序后取前n个. 当然这种做法妥妥的会MLE+TLE 我们会发现实质上这种做法的缺点在于存入了大量不需要的数据. 那么该怎么进行优化呢? 观察题目,易得下列关系 a[1]+b[1]<=a[2]+b[1]<=...<=a[n]+b[1] a[1]+b[2]<=a[2]+b[2]<=...<=a[n]+b[2] a[1]+b[3]<=a[2]+b[3]<=...<=a[n]+b…