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元. 我们还知道他买的啤酒比饮料的数量少,请 ...
随机推荐
- PHP 函数的作用
函数是为了封装方法,方便调用. 设计一个计算的代码函数.举个栗子 <?php /** * Created by PhpStorm. * User: 炜文 * Date: 2017/2/15 * ...
- 【替代语法】PHP中冒号、endif、endwhile、endfor这些都是什么
我们经常在wordpress一类博客程序的模板里面看到很多奇怪的PHP语法,比如: <?php if(empty($GET_['a'])): ?><font color=" ...
- Golang基础之文件操作
目录 文件读取 os.open文件读取 os.open循环读取 bufio文件读取 bufio循环读取 ioutil读取整个文件 文件写入 os.OpenFile文件写入 bufio.NewWrite ...
- CF6
A A 不解释 #include<bits/stdc++.h> using namespace std; namespace red{ inline int read() { int x= ...
- Cookie跨域setDomain和setPath
CSDN日报20170226--<你离心想事成只差一个计划> 程序员2月书讯 [招募]Python学习班招生啦 Cookie跨域setDomain和setPath 标签: cookiesp ...
- JAVA 集合 List 分组的两种方法
CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...
- 自定义工具'MSDiscocodeGenerator’失败。未能检索当前项目。
问题描述: 引用webservice时不出错,但更新是出现错误 “自定义工具'MSDiscocodeGenerator’失败.未能检索当前项目.” 解决办法: 打开控制面板修复.NET 3.5SP1, ...
- numpy高级函数:where与extract
numpy高级函数:where与extract 1.numpy.where()函数,此函数返回数组中满足某个条件的元素的索引: import numpy as np x = np.array([[1, ...
- Python Sklearn.metrics 简介及应用示例
Python Sklearn.metrics 简介及应用示例 利用Python进行各种机器学习算法的实现时,经常会用到sklearn(scikit-learn)这个模块/库. 无论利用机器学习算法进行 ...
- Spring声明式事物原理分析
基础准备 pom <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...