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个小 ...
随机推荐
- 4、DES和RSA简介
DES是分组加密算法,速度快,使用单一密钥,加密解密都使用同一个密钥,一般用于大量数据加密,目前处于半淘汰状态. RSA算法是流式加密算法,速度慢,但是使用成对的密钥,加密解密使用不同的密钥,有利于保 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(33)-MVC 表单验证
系列目录 注:本节阅读需要有MVC 自定义验证的基础,否则比较吃力 一直以来表单的验证都是不可或缺的,微软的东西还是做得比较人性化的,从webform到MVC,都做到了双向验证 单单的用js实现的前端 ...
- Git 常用命令
一.初始環境配置 git config --global user.name "John Doe"git config --global user.email johndoe@ex ...
- MVP社区巡讲-云端基础架构:12月5日北京站 12月12日上海站
紧跟当今的技术发展趋势还远远不够,我们要引领变革!加入本地技术专家社区,获取真实案例.实况培训演示以及探讨新一代解决方案.在此活动中,您将: 了解如何运用开源(OSS)技术.Microsoft 技术及 ...
- VS2015企业版,社区版,专业版详细对比
VS2015 微软出了3个大版本,其实在前天晚上就放出了三个版本的对比说明.,但是昨天挂掉了..今天特意去看了..截取了自己觉得比较重要的分享一下. 首先我们最常用的 诊断调试工具 其次测试工具(区别 ...
- AR创意分享:儿童涂鸦遇上程序绘图
第一节 临摹 小明经常临摹同桌小美的画作. 美术课上,老师表扬了小美的新作. 图1.1 小美的作品<蒙娜·毛虫的微笑> 临,是照着原作画:摹,是用薄纸张蒙在原作上面画. 第二节 借画 小明 ...
- 控制反转、依赖注入、Unity容器
控制反转原则 依赖注入 Install-Package Unity:https://www.nuget.org/packages/Unity/ Github:https://github.com/un ...
- MongoDB集群卡死问题
一年前搭了个MongoDB集群,跑得还算不错,但是有几次遇到过服务卡死的问题.处理起来已经得心应手了,拿来跟大家分享一下: 故障现象: 业务查询缓慢,而且会有连接异常: { "serverU ...
- R语言:常用统计检验
统计检验是将抽样结果和抽样分布相对照而作出判断的工作.主要分5个步骤: 建立假设 求抽样分布 选择显著性水平和否定域 计算检验统计量 判定 -- 百度百科 假设检验(hypothesis test)亦 ...
- swift-分支
swift相当于OC的比较 if后的括号可以省略 if后只能接bool值 if后的大括号不能省略 let num1 = 5.0 let num2 = 4.0 let boo :Bool = true ...