福建工程学院寒假作业A题

Problem Description

给出一个从递增的正整数序列a0,a1……an-1
对不同的查询输出对应结果

Input

只有一组数据
第一行是一个整数n,代表序列的长度(下标从0开始一直到n-1)
接下来n个整数,代表序列对应位置上的数
再接下来一行是一个整数m代表查询次数
接下来m行
接下来的每行是这5种类型之一
0 x    代表查询数字x出现的最大下标,若不存在x输出-1
1 x    代表查询数字x出现的最小下标,若不存在x输出-1
2 x y  代表查询大于等于x且小于等于y的数字的个数,并保证x<=y
3 x    代表查询比x大且下标最小的数字的大小,若不存在比x大的数字输出-1
4 x    代表查询比x小且下标最大的数字的大小,若不存在比x小的数字输出-1
n,m<10^5
0<=ai,x,y<10^9

Output

输出对应结果,每个结果占一行

SampleInput
10 
1 1 1 3 4 5 5 5 5 8
5
0 5
1 5
2 1 5
3 4
4 8
SampleOutput
8
5
9
5
5

该题是二分法的应用。再用if进行选择就行了
以下为二分的基本模板

根据题目要求,查询数字x出现的最大下标,则find_upper_bound(q)-1为x出现的最后一个位置

                     查询代表查询数字x出现的最小下标,则find_upper_bound(q-1)为x出现的第一个位置

                     查询大于等于x且小于等于y的数字的个数,并保证x<=y,则需要y出现的最后一个位置减去x出现的第一个位置再+1

                    查询比x大且下标最小的数字的大小,则find_upper_bound(q)为大于x的第一个位置,这题要求的是数字,所以为a[find_upper_bound(q)]

                     代表查询比x小且下标最大的数字的大小,则find_upper_bound(q-1)-1为小于x的第一个位置,该题也要求是数字。

当find_upper_bound(q)==find_upper_bound(q-1)时 ,x不存在。

以上为该题题解。

 

 
      

转载于:https://www.cnblogs.com/unique123/p/6322541.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值