Gunner II
题意描述
Long long ago, there was a gunner whose name is Jack. He likes to go hunting very much. One day he go to the grove. There are n birds and n trees. The i-th bird stands on the top of the i-th tree. The trees stand in straight line from left to the right. Every tree has its height. Jack stands on the left side of the left most tree. When Jack shots a bullet in height H to the right, the nearest bird which stands in the tree with height H will falls.
Jack will shot many times, he wants to know which bird will fall during each shot.
给定n棵树和猎人能够进行的m次射击,每次射击能够射下相应高度最近树的鸟,询问落下鸟的顺序。
思路
我们可以使用结构体数组来存储树的序号与树的高度,使用两个数组来存储相应的序号和高度,同样可以使用lower_bound来寻找与射击高度相同的树,如果找到,则让对应的下标数组加1,没有找到则置-1。
下面来举个例子,对于样例
5 5 1 2 3 4 1 1 3 1 4 2
排序过后如图:
而对应的low数组和h数组如下:
low[1]=[1],low[2]=5,low[3]=2,low[4]=3,low[5]=4 h[1]=1,h[2]=1,h[3]=2,h[4]=3,h[5]=4
如果寻找到第一颗高为1的树,则low[1]++成为2,当到第二个高为1的样例时,h[low[p]]=5,匹配成功。
AC代码
#include<bits/stdc++.h>
#define x first
#define y second
#define IOS ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
typedef unsigned long long ULL;
typedef pair<int,int> PII;
typedef pair<long,long> PLL;
typedef pair<char,char> PCC;
typedef long long LL;
const int N=1e5+10;
const int M=150;
const int INF=0x3f3f3f3f;
const int MOD=998244353;
struct node{
int idx,h;
}Node[N];
bool cmp(node a,node b){
if(a.h!=b.h) return a.h<b.h;
return a.idx<b.idx;
}
int h[N],low[N];
void solve(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=1;i<=n;i++){
scanf("%d",&Node[i].h);
Node[i].idx=i;
}
sort(Node+1,Node+1+n,cmp);
for(int i=1;i<=n;i++) low[i]=i,h[i]=Node[i].h;
for(int i=1;i<=m;i++){
int x;scanf("%d",&x);
int p=lower_bound(h+1,h+1+n,x)-h;
if(h[low[p]]!=x) printf("-1n");
else{
printf("%dn",Node[low[p]].idx);
low[p]++;
}
}
}
}
int main(){
//IOS;
solve();
return 0;
}
- WordPress 网站开发“微信小程序”实战(五)
- Windows Runtime(WinRT) 揭秘
- WeApp-Workflow: 基于Gulp 的微信小程序前端开发工作流
- 如何安装Windows Phone SDK 7.1 Release Candidate (RC)
- 微信与支付宝回应央行新规:认同央行规范!
- Gulp 工作流中Sass 增量编译功能的探索
- Sass与Compass——回顾
- 苹果就“降速门”致歉;央行批扫码支付不正当竞争;王健林旗下公司遭集体裁员
- 姚期智教授:量子计算是千亿万亿级别的产业,或成为科技创新的引擎
- Powershell中禁止执行脚本解决办法
- 使用AsyncTask异步更新UI界面及原理分析
- 商家为何要做小程序?
- Android中关于dip和px以及转换的总结
- Python介绍
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux 监控之 IO
- python自学成才之路 函数详细用法
- 你所不知道的TIME_WAIT和CLOSE_WAIT
- linux之网络
- linux vim编辑器之常用指令
- saltstack手册(含官方pdf)
- 详解Go变量类型的内存布局
- linux vim 编辑器之多文件多窗口编辑
- 深入解析 Go 中 Slice 底层实现
- 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)
- linux文件时间属性 查看和修改文件时间
- Linux硬连接和软连接详解
- Linux 压缩,解压缩,打包指令
- Linux下使用python脚本执行BCP导入导出操作
- 通用高效字符串匹配--Sunday算法