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

本文共 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

你可能感兴趣的文章
P1908-逆序对
查看>>
P1192-台阶问题
查看>>
ACM模板——康托展开
查看>>
P1025-数的划分
查看>>
P1305-新二叉树
查看>>
第24章 项目5:虚拟茶话会
查看>>
python 读 xlsx
查看>>
一、使用pip安装Python包
查看>>
spring与quartz整合
查看>>
3.Compound data types
查看>>
caioj1441:第k小的数Ⅰ
查看>>
Kattis之旅——Eight Queens
查看>>
3.PHP 教程_PHP 语法
查看>>
Duilib扩展《01》— 双击、右键消息扩展
查看>>
6.1.2.10 超链接美化
查看>>
利用Fiddler拦截接口请求并篡改数据
查看>>
python习题:unittest参数化-数据从文件或excel中读取
查看>>
Android控件之GridView探究
查看>>
在工程中要加入新的错误弹出方法
查看>>
在Spark中尽量少使用GroupByKey函数(转)
查看>>