51nod 1287: 加农炮 好题啊好题
第1行:2个数M, N中间用空格分隔,分别为数组A和B的长度(1 <= m, n <= 50000)
第2至M + 1行:每行1个数,表示对应的地形高度(0 <= A[i] <= 1000000)。
第M + 2至N + M + 1行,每行1个数,表示炮弹的高度(0 <= B[i] <= 1000000)。
输出共M行,每行一个数,对应最终的地形高度。
9 11
1
2
0
4
3
2
1
5
7
2
8
0
7
6
5
3
4
5
6
5
2
2
2
4
3
3
5
6
7
最开始自己的思路是用刚学的线段树来做,但是问题在于更新这块自己还不是很熟练,就是一个炮弹打过来,某地高度+1,这样的话我自己现在的方法只能是更新整个的线段树,一直到最小节点上。所以估计时间会超时,这个思路out。
然后自己的思路是记录整个地方的高地。就是 {1, 2, 0, 4, 3, 2, 1, 5, 7},记录1 2 4 5 7。然后炮弹打过来不断更新这个高地数组。过了19个用例,其中一个死活过不了。。。后来想自己更新这个也不对啊,中间会产生高地,比方说2 2 5,一个炮弹4的打过来,高地原来是2 5,现在就得是
2 3 5了。。。还是麻烦。
最后,还是老实用二分找炮弹打过来的高地,将其之前的土地高度+1,然后更新高地高度。
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; int canno[1000003];
int highet[1000003];
int A,B; int main()
{
int i,j,h_max,gun,pos;
memset(canno,0,sizeof(canno)); scanf("%d%d",&A,&B);
h_max=-1;
for(i=1;i<=A;i++)
{
scanf("%d",highet+i);
h_max=max(h_max,highet[i]);
canno[i]=h_max;
}
int count=0;
for(i=1;i<=B;i++)
{
scanf("%d",&gun);
if(gun<=canno[0]||gun>canno[A])
continue;
pos=lower_bound(canno+1,canno+1+A,gun)-canno;
highet[pos-1]++;
canno[pos-1]=max(canno[pos-1],highet[pos-1]);
}
for(i=1;i<=A;i++)
{
printf("%d\n",highet[i]);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
51nod 1287: 加农炮 好题啊好题的更多相关文章
- 51Nod 1287 加农炮 (线段树)
1287 加农炮 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个长度为M的正整数数组A,表示从左向右的地形高度 ...
- 51nod 1287加农炮
1287 加农炮 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个长度为M的正整数数组A,表示从左向右的地形高度.测试一种加农炮 ...
- 51NOD 1287 加农炮(不水的线段树)
>>点击进入原题测试<< Input示例 Output示例 思路:刚开始以为结点存最大值就行了,然后大于左子树的最大值就能进入右子树:然后发现样例都过不了:后面发现,并不是这个 ...
- 51 Nod 1287 加农炮(单调队列思想+二分)
1287 加农炮 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个长度为M的正整数数组A,表示从左向右的地形高度 ...
- poj 1002:487-3279(水题,提高题 / hash)
487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 236746 Accepted: 41288 Descr ...
- BZOJ 3097: Hash Killer I【构造题,思维题】
3097: Hash Killer I Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 963 Solved: 36 ...
- PHP实现类似题库抽题效果
PHP实现类似题库抽题效果 大家好,我顾某人又回来了,最近学了一点PHP,然后就想写个简单小例子试试,于是就写了一个类似于从题库抽题的东西,大概就是先输入需要抽题的数量,然后从数据库中随机抽取题目. ...
- PAT乙级真题及训练题 1025. 反转链表 (25)
PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...
- 啤酒和饮料|2014年蓝桥杯B组题解析第一题-fishers
啤酒和饮料|2014年第五届蓝桥杯B组题解析第一题-fishers 啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道他买的啤酒比饮料的数量少,请 ...
随机推荐
- AJAX封装数据处理简单操作
数据的封装处理主要展现在JS中,在页面里面引入封装的JS, "js/ajax.js" 简单封装将get和post方法都写入,get的方法和post的方法依然需要严格区分,包括typ ...
- Cookie存储在哪里
内存是临时存储,关机后信息就没了.硬盘是长久存储,不删除就一直在.内存容量决定你电脑能同时运行的程序多少,硬盘容量决定你电脑能存放多少东西. 好比内存是手,硬盘是口袋,东西可以临时放在手里,可是口袋才 ...
- PHP 获取header 的自定义参数值
$.ajax({ type: "GET", url: "default.aspx", beforeSend: function(request) { reque ...
- 094、Java中String类之直接赋值时的堆内存自动引用
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- UDP打洞实验
依云 posted @ 2 年前 in 网络 with tags python 网络 socat UDP , 7095 阅读 本文来自依云's Blog,转载请注明. 两台没有外网 IP.在 NAT ...
- 九:File类,文件的操作
File的常用方法:
- 微软重制Windows 1.0系统:祖师爷出山了
Windows官方推特在7月1日发布了一条很有趣的动态,“向大家介绍全新的Windows 1.0,带MS-DOS.时钟等”.配发的视频回顾了从Windows 1.0/3.1到Windows 10期间, ...
- Python下opencv使用笔记(图像频域滤波与傅里叶变换)
Python下opencv使用笔记(图像频域滤波与傅里叶变换) 转载一只程序喵 最后发布于2018-04-06 19:07:26 阅读数 1654 收藏 展开 本文转载自 https://blog ...
- springboot自定义属性文件与bean映射注入属性值
主要有几点: 一.导入依赖 springboot的包和: <dependency> <groupId>org.springframework.boot</groupId& ...
- [Java] Eclipse 设置相同变量背景色高亮显示
在Eclipse中,鼠标选中或者光标移动到java类的变量名时,相同变量会被标识显示(设置背景色高亮), 并且侧边滚动条会标出变量的位置, 查找变量十分方便. 1.相同变量标识高亮显示:Window ...