博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1631 序列合并
阅读量:6452 次
发布时间:2019-06-23

本文共 1454 字,大约阅读时间需要 4 分钟。

首先,对于最暴力的算法。就是将n^2个和全都枚举出来。然后排序

可是,在数据范围很大的时候,空间和时间都不能通过

所以我们就要优化~~ 废话~~

首先我们的贪心策略不会变。优化的只能是枚举和的步骤

我们来看,对于A中的第i项和B中的第j项(A、B都是升序)

只有第i项和第j-1项被取了之后,我们才有可能取到第i项和第j项

所以我们就可以将计算第i项和第j项的和推迟在第i项和第j-1项之后。就可以节省空间。

然后用栈进行维护

写程序的时候。我们要进行定序处理。

嗯,差不多就这么多了。

#include
#include
#include
using namespace std;struct node{ int val1,val2; int sum; bool operator > (const node &b) { return sum>b.sum; }//重载运算符};struct heap//堆模板{ int tail; node data[500000]; node top() { return data[1]; } void swap(int a,int b) { node pass=data[a]; data[a]=data[b]; data[b]=pass; } void insert(node value) { data[++tail]=value; int pos=tail; while(pos&&data[pos>>1]>data[pos]) { swap(pos>>1,pos); pos>>=1; } return ; } void del() { swap(1,tail); tail--; int pos=1,pass; while(pos<=tail) { pass=pos; if(data[pass]>data[pos<<1]&&(pos<<1)<=tail) pass=pos<<1; if(data[pass]>data[pos<<1|1]&&(pos<<1|1)<=tail) pass=pos<<1|1; if(pass==pos) break; swap(pass,pos); pos=pass; } return ; }}; int dat1[500000];int dat2[500000];heap h;bool compare(const int &a,const int &b){ return a

转载于:https://www.cnblogs.com/Lance1ot/p/8761817.html

你可能感兴趣的文章
MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程
查看>>
比特币事件是否证明中国网络安全不堪一击?
查看>>
软件测试经验谈
查看>>
Domino下通过web方式管理服务器信息
查看>>
整数转换为字符
查看>>
Virtualbox上面UEFI/GPT安装Archlinux20160222
查看>>
vCloud Director Enterprise Cloud 5.5部署(八)
查看>>
网站优化之前要准备的工作
查看>>
Java并发编程:volatile关键字解析
查看>>
运维自动化之zabbix (web)(8)
查看>>
php时间处理函数
查看>>
SQL最常用基础语句
查看>>
js动态设置margin
查看>>
js 函数作用域与this 的指向实例
查看>>
iOS之路13-SDWebImage 框架的基本使用
查看>>
cat命令--Linux命令应用大词典729个命令解读
查看>>
安装PostGIS-2.1.8
查看>>
《gcc五分钟系列》第十节:编译期优化选项(一)——pipe
查看>>
MFC第二课 文件类型使用技巧
查看>>
SQLite第二课 源码下载编译
查看>>