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个小 ...
随机推荐
- CSS实现图片缩放特效
今天是感恩节,祝大家感恩节快乐哦!最近天冷了,大家注意保暖哟.下面一起看看小颖写的demo吧. html代码: <!DOCTYPE html> <html> <head& ...
- .NET Core下的日志(2):日志模型详解
NET Core的日志模型主要由三个核心对象构成,它们分别是Logger.LoggerProvider和LoggerFactory.总的来说,LoggerProvider提供一个具体的Logger对象 ...
- IOS 封装功能和逻辑思想
在ios开发中,难免会用到helper的思想.这篇就简单讲解下关于helper的简单实用方法. 假设我们要做一个这样的界面: 会议分为四种情况: 未召开 正在召开 已结束 已取消 再看看逻辑关系: 编 ...
- 基于tiny4412的Linux内核移植 ---- 調試方法
作者信息 彭東林 郵箱: pengdonglin137@163.com 平臺 Linux-4.4.4 uboot使用的是友善自帶的(爲了支持uImage和設備樹做了稍許修改) 概述 這篇博客主要用於匯 ...
- Ajax接收不到PHP return后的结果的原因
PHP在处理ajax返回值的时候,如果使用return如 return $result会失败,echo $result却没问题. 解释原因如下: 1.ajax请求从服务器端读取返回值,而且这些返回值必 ...
- Spring MVC学习
SpringMVC框架 转载请注明出处 目录 一:配置springMVC开发环境 1.1.配置文件的helloworld 1.2.基于注解的helloworld 二:@RequestMapping详解 ...
- ASP.NET Core 中文文档 第二章 指南(3)用 Visual Studio 发布一个 Azure 云 Web 应用程序
原文:Getting Started 作者:Rick Anderson 翻译:谢炀(Kiler) 校对:孟帅洋(书缘).刘怡(AlexLEWIS).何镇汐 设置开发环境 安装最新版本的 Azure S ...
- C#遐想/瞎想
泛型约束更强大.比如支持有参构造函数.枚举.委托: void Foo<T>() where T : new(string, int), enum, delegate 空值判断符允许对属性/ ...
- 设计模式(九)装饰者模式(Decorator Pattern)
一.引言 在软件开发中,我们经常想要对一类对象添加不同的功能,例如要给手机添加贴膜,手机挂件,手机外壳等,如果此时利用继承来实现的话,就需要定义无数的类,如StickerPhone(贴膜是手机类).A ...
- C# - 多线程 之 异步编程
异步编程 同步编程,请求响应模型,同步化.顺序化.事务化. 异步编程,事件驱动模型,以 Fire and Forget 方式实现. 异步编程模式 -§- 异步编程模型 (APM) 模式: IAsyn ...