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
- 思路:线段树+二分,利用线段树存储每一个区间内的山峰最高值,通过二分查找找出高度大于等于当前炮弹的山峰下标k,将k-1位置的山峰高度+1即可
- #include<iostream>
- #include<algorithm>
- #include<cstring>
- #include<cstdio>
- using namespace std;
- //typedef long long LL;
- const int maxn = ;
- int a[maxn],rs[maxn<<];
- int n,m;
- void pushup(int rt){
- rs[rt] = max(rs[rt<<],rs[rt<<|]);
- }
- void build(int l,int r,int rt)
- {
- if(l==r){
- rs[rt] = a[l];
- return;
- }
- int mid=(l+r)>>;
- build(l,mid,rt<<);
- build(mid+,r,rt<<|);
- pushup(rt);
- }
- void update(int x,int l,int r,int rt)
- {
- if(l==r){
- rs[rt]++;
- return;
- }
- int mid=(l+r)>>;
- if(x<=mid) update(x,l,mid,rt<<);
- else update(x,mid+,r,rt<<|);
- pushup(rt);
- }
- int query(int x,int l,int r,int rt)//根据x的值找出从左往右找出第一个能碰到的山峰的下标
- {
- if(l==r) return l;
- int mid = (l+r)>>;
- if(x<=rs[rt<<]) query(x,l,mid,rt<<);
- else query(x,mid+,r,rt<<|);
- }
- int Query(int x,int l,int r,int rt)//根据点查询数据
- {
- if(l==r)return rs[rt];
- int mid = (l+r)>>;
- if(x<=mid)Query(x,l,mid,rt<<);
- else Query(x,mid+,r,rt<<|);
- }
- int main()
- {
- ios::sync_with_stdio(false);
- // freopen("in.txt","r",stdin);
- while(cin>>n>>m){
- int x;
- memset(rs,,sizeof(rs));
- for(int i=;i<=n;i++)
- cin>>a[i];
- build(,n,);
- for(int i=;i<=m;i++){
- cin>>x;
- // if(x>rs[1]||x<=a[1])continue;一开始在这里卡了好久 后头想起来第一个位置的高度可能也会更新所以每一次都需要查询
- if(x>rs[]||x<=Query(,,n,))continue;
- int k=query(x,,n,);
- update(k-,,n,);//更新前一个点的高度
- }
- for(int i=;i<=n;i++)
- cout<<Query(i,,n,)<<endl;
- }
- return ;
- }
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,表示从左向右的地形高度 ...
- 51nod 1287 线段树
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1287 简单的线段树题目,直接写个二分查找大于等于x的最小位置就好了. # ...
- 解题报告:51nod 加农炮
2017-10-07 16:15:16 writer:pprp 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个长度为M的正整 ...
- 51nod加农炮
这道题维护一下前缀最大值然后二分答案就好了哇 233 #include<cstdio> #include<cstring> #include<algorithm> ...
- 【51Nod 1244】莫比乌斯函数之和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...
- 51Nod 1268 和为K的组合
51Nod 1268 和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...
随机推荐
- @codechef - KILLER@ Painting Tree
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 N 个点的有根树,标号 1 到 N,以 1 为根.定义 ...
- Django Rest Framework Serializer的简单使用
1.RESTful 1.1 定义 REST(Representational State Transfer)与技术无关,代表一种软件架构风格,中文为表征状态转移. 1.2 RESTful API设计 ...
- python 解释器编码
- 网络编程--多线程 , socketserver
内容补充 python2与python3的区别? """ python3对unicode字符的原生支持 Python2中使用ASCII码作为默认编码方式导致string有 ...
- 如何在WPF控件上应用简单的褪色透明效果?
原文 https://dailydotnettips.com/how-to-create-simple-faded-transparent-controls-in-wpf/ 使用OpacityMask ...
- TCP之单项通信
TestServer.java package com.sxt.tcp; /* * 服务端 */ import java.io.DataInputStream; import java.io.IOEx ...
- 基于Qt框架的GUI控制台——qtconsole
- IoT SaaS加速器——助力阿尔茨海默病人护理
场景介绍 阿尔茨海默病,是导致中老年人认知功能障碍的最常见疾病之一,是发生在老年期及老年前期的一种原发性退行性脑病.据估计,全世界痴呆症患者数量为4700万,到2030年将达到7500万人.痴呆症患者 ...
- Flask学习之十三 日期和时间
英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xiii-dates-and-times 中文翻译地址: ...
- Vue.js 第2章 钩子函数&自定义指令&过滤器&计算属性&侦听器
目标 钩子函数 自定义指令 自定义过滤器 计算属性 监听属性 局部自定义指令 为什么需要自定义指令 为了复用,为了代码的灵活 指令的分类:全局指令,局部指令 在vm外面创建的指令 通过Vue.dire ...