AC日记——最小的N个和 codevs 1245
有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求这N^2 个和中最小的 N个。
第一行输入一个正整数N;第二行N个整数Ai 且Ai≤10^9;第三行N个整数Bi,
且Bi≤10^9
输出仅一行,包含 n 个整数,从小到大输出这 N个最小的和,相邻数字之间用
空格隔开。
5
1 3 2 4 5
6 3 4 1 7
2 3 4 4 5
【数据规模】 对于 100%的数据,满足 1≤N≤100000。
思路:
用堆做,手写堆;
先把a1+b1到a1+bn的值扔到堆中
然后a,b序列排序
堆是大根堆
堆里就是当前最小的n个和
堆顶就是当前n个和中最大的数
然后从a2开始循环
每次循环开一重新的循环
把b序列遍历
然后如果ai+bj<top,则弹出top,ai+bj入堆
否则跳出这层j循环进入下一个i循环
因为a,b的单调性,所以我们可以实现上述步骤
然后每次入堆都伴随着一次出堆
所以,最后一定是n个
按倒序输出轻松ac
来,上代码:
#include <cstdio>
#include <algorithm> using namespace std; class T_heap {
private:
int heap[],n; public:
void up(int now)
{
if(now<=) return ;
int front=now>>;
if(heap[front]>heap[now])
{
swap(heap[front],heap[now]);
up(front);
}
} void down(int now)
{
if(now>n) return;
int vlc,vrc,next=now;
bool blc,brc;
if((now<<)<=n) blc=true,vlc=heap[now<<];
else blc=false;
if((now<<|)<=n) brc=true,vrc=heap[now<<|];
else brc=false;
if(blc)
{
if(vlc<heap[next])
{
next=now<<;
}
}
if(brc)
{
if(vrc<heap[next])
{
next=now<<|;
}
}
if(next!=now)
{
swap(heap[next],heap[now]);
down(next);
}
} void push(int cur_)
{
n++;
heap[n]=cur_*-;
up(n);
} void pop()
{
heap[]=heap[n];
n--;
down();
} int top()
{
return heap[]*-;
}
};
class T_heap que; int n,if_z,ai[],bi[]; char Cget; inline void read_int(int &now)
{
now=,if_z=;Cget=getchar();
while(Cget>''||Cget<'')
{
if(Cget=='-') if_z=-;
Cget=getchar();
}
while(Cget<=''&&Cget>='')
{
now=now*+Cget-'';
Cget=getchar();
}
now*=if_z;
} int main()
{
read_int(n);
for(int i=;i<=n;i++)
{
read_int(ai[i]);
}
sort(ai+,ai+n+);
for(int i=;i<=n;i++)
{
read_int(bi[i]);
que.push(ai[]+bi[i]);
}
sort(bi+,bi+n+);
for(int i=;i<=n;i++)
{
int top_=que.top();
for(int j=;j<=n;j++)
{
if(ai[i]+bi[j]<top_)
{
que.pop();
que.push(ai[i]+bi[j]);
top_=que.top();
}
else break;
}
}
for(int i=n;i>=;i--)
{
ai[i]=que.top();
que.pop();
}
for(int i=;i<=n;i++) printf("%d ",ai[i]);
return ;
}
AC日记——最小的N个和 codevs 1245的更多相关文章
- AC日记——最小正子段和 51nod 1065
最小正子段和 思路: 找最小的大于0的sum[j]-sum[i](j>i): 高级数据结构(splay)水过: 来,上代码: #include <cstdio> #include & ...
- AC日记——最小路径覆盖问题 洛谷 P2764
题目描述 «问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶点开 ...
- AC日记——二叉堆练习3 codevs 3110
3110 二叉堆练习3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 给定N(N≤500,000)和N个整 ...
- AC日记——爱改名的小融 codevs 2967
2967 爱改名的小融 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 白银 Silver 题解 题目描述 Description Wikioi上有个人叫小融,他喜欢 ...
- AC日记——codevs1688求逆序对
AC日记--codevs1688求逆序对 锵炬 掭约芴巷 枷锤霍蚣 蟠道初盛 到被他尽情地踩在脚下蹂躏心中就无比的兴奋他是怎么都 ㄥ|囿楣 定要将他剁成肉泥.挫骨扬灰跟随着戴爷这么多年刁梅生 圃鳋 ...
- AC日记——楼房 codevs 2995
2995 楼房 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 地平线(x轴)上有n个矩(lou ...
- AC日记——丑数 codevs 1246
1246 丑数 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 对于一给定的素 ...
- AC日记——蓬莱山辉夜 codevs 2830
2830 蓬莱山辉夜 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 在幻想乡中,蓬莱山辉夜是月球 ...
- AC日记——约瑟夫问题 codevs 1282
1282 约瑟夫问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 有编号从1到N的N个小 ...
随机推荐
- JS作用域面试题总结
关于JS作用域问题,是面试的时候面试官乐此不疲的面试题,有时候确实是令人抓狂,今天看到一个讲解这个问题的视频,明白了那些所谓的“原理”顿时有种豁然开朗的感觉~~~ 1.js作用域(全局变量,局部变量) ...
- (转)构建自己的AngularJS,第一部分:Scope和Digest
原翻译链接:https://github.com/xufei/Make-Your-Own-AngularJS/edit/master/01.md 原文链接:http://teropa.info/blo ...
- 读书笔记--SQL必知必会11--使用子查询
11.1 子查询 查询(query),任何SQL语句都是查询.但此术语一般指SELECT语句. SQL还允许创建子查询(subquery),即嵌套在其他查询中的查询. 作为子查询的SELECT语句只能 ...
- Node.js 给前端带来了什么
在软件开发领域,前端工程师曾经是一个比较纠结的职业.在Web技术真正发展起来之前的相当长一段时间里,由于技术门槛很低,前端工程师行业一直是鱼龙混杂的状态.其中很多号称是Web开发者的人实际上并没有什么 ...
- Web项目从Oracle转为Mysql,fluentnhibernate-1.0和NHibernate2.1.0升级到NHibernate3.3的注意事项
1.Oracel数据库没有字段自增长属性,要实现自增长通常是通过查询序列或者触发器来实现的. 设置自增长主键 alter table SUB_SUBSCRIPTION add primary key( ...
- 《连载 | 物联网框架ServerSuperIO教程》- 9. 协议过滤器,解决一包多发、粘包、冗余数据
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- webuploader上传文件,图片
WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.官方地址:http://fex.baidu.com/webupload ...
- java基础1.-------抽象类,抽象方法
抽象类:抽象类不能实例化,类中的方法必须经过子类的重写实现 类里的方法是public修饰时,子类可重写也可不重写 类的方法是abstract修饰时,方法是抽象方法,子类必须重写该方法 类的方法用fin ...
- Linux(九)__网络测试
1.确认ip地址.子网掩码.网关是正确的. ifconfig 2.确认局域网是互通的,访问别人的电脑.网关 ping 发送数据包接收数据包,设备是否联通 /etc/sysconfig/network- ...
- hibernate的get和load的区别
在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通过session.get()方法,另一种就是通过session.load()方法,然后其实这两种方法在获得一个实体对 ...