序列合并,洛谷之提高历练地,堆

原创 2018年04月16日 11:18:09

正文

      第三题:序列合并

      我们很容易就可以得到一个结论,将A,B从小到大排序后,可以满足A1+B1<=A1+B2<=A1+B3...

      我们也可以满足A1+B1<=A2+B1<=A3+B1...

      那么我们选出一个最小的,那么第二小的只可能存在于Ai+1 + Bj   或者   Ai + Bj+1;%%%

      所以我们排一次序后,把A1+B1到A1+Bn扔进堆里,然后保证大根堆里面有n个的情况下,不断往里面塞最小值,然后倒序输出即可。

代码

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;

int n;
int a[100010],b[100010];
priority_queue<int> f;
int t[100010];

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=n;i++) scanf("%d",&b[i]);
    sort(a+1,a+1+n);
    sort(b+1,b+1+n);
    for(int i=1;i<=n;i++)
        f.push(a[1]+b[i]);
    for(int i=2;i<=n;i++){
        for(int j=1;j<=n;j++){
            int x=a[i]+b[j];
            if(f.top()<=x) break;//比堆顶还要大就直接出来;
            f.pop();//如果不是,则更换堆顶
            f.push(x);
        }
    }
    int tt=0;
    while(!f.empty()){
        t[++tt]=f.top();
        f.pop();
    }
    for(int i=tt;i>=1;i--)
        printf("%d ",t[i]);
}


版权声明: https://blog.csdn.net/Deep_Kevin/article/details/79957859

SuperGCD,洛谷之提高历练地,数论(3-5)

前话      数论就是研究整数的理论。包括公约公倍数、质数、欧拉定理和同余方程等。正文       其实数论不止那么简单正文      第一题:SuperGCD      这一题就是很烦的代码加很烦...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-07 17:19:43
  • 9

[SDOI2009]E&D,洛谷之提高历练地,博弈论(3-6)

正题      第四题:[SDOI2009]E&amp;amp;D      这题不是如此的简单,因为它要涉及到找规律和Sg函数。      首先的,我们可以打一个表来观察之间的关系。      Sg...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-08 13:48:45
  • 11

种树,洛谷之提高历练地,堆

正题      第五题:种树      这题看上去很烦,实际上也很烦。。。      那么我们第一个想到的就是用堆维护最大值。      我们把多步拆成多个一步来求解,当k=1的时候,那么答案就是最大...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-16 11:42:57
  • 4

[HNOI2003]操作系统,洛谷之提高历练地,堆

正题      第二题:[HNOI2003]操作系统      我们看到了“优先级最高”这几个字,我们就想到了用堆来维护bool operator&amp;lt;(const node y)const...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-16 10:55:04
  • 21

食物链,洛谷之提高历练地,并查集

正文      第二题:食物链      这题经典啊!!!我们可以想象,如果我们可以搞一个并查集来维护x的同伙,天敌和食物就好了。      我们想到了开三倍空间来维护x的天敌,同伙和食物。     ...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-15 15:57:03
  • 15

跑路,洛谷之提高历练地,倍增

正题      跑路      这题看上去好像无从下手,又有重边,又有自环,但是想一想,其实都是一样的。      我们可不可以先处理一下一步可以到达的边,当然,一步可以到达当且仅当i到j的路径长度为...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-20 14:51:22
  • 7

无线通讯网,洛谷之提高历练地,最小生成树

正题      第三题:无线通讯网      这题中的卫星电话,就指的是可以把原图分成S个联通块后,就可以互相联通。      那我们要把原图分成S个联通块,那么我们只需要选中P-S条最短的边(当然是...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-11 09:28:35
  • 4

货车运输,洛谷之提高历练地,倍增

正题       第一题:货车运输       这道题很经典啊~~       直接建立倍增关系式求LCA即可。       不妨设i的第2^j个爸爸是f[i][j],而这条路径上的最小值设为mmin...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-20 11:48:01
  • 8

独木桥,洛谷之提高历练地,神奇的解法

正题      这题很搞笑啊~~      下面是转载洛谷 I_am_wx的题解。      你在桥上看风景,看风景的人在轰炸机上看着你。      首先自行脑补一下,假装你正在20000米高空的轰炸...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-20 07:39:54
  • 2

开车旅行,洛谷之提高历练地,倍增

正文      第二题:开车旅行      这题贼难~。      首先我们要知道当前点的最短路和次短路的长度和所跳到位置,这样我们用倍增才好解决。。。      我们就想着把它排序,因为排完序之后他...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-20 11:57:50
  • 9
收藏助手
不良信息举报
您举报文章:序列合并,洛谷之提高历练地,堆
举报原因:
原因补充:

(最多只允许输入30个字)