1305 : 二分查找
时间限制Time Limit
1
秒Sec
内存限制Memory Limit
128
兆MB
提交次数Submitted
778 次Times
通过次数Solved
212 次Times
标准评测 Standard
从标准输入读入,结果写到标准输出。评测将输出拆成 token,与标准答案逐项比较,不按整段逐字节比对。
Read from standard input and write to standard output. The judge splits the output into tokens and compares them with the official answer; it does not compare raw bytes.
| 比对Compare | token 相同即通过。中间的空格、制表符、换行可多可少。Matching tokens pass. Extra spaces, tabs, or newlines between them are ignored. |
|---|---|
| 不同则错Differs | token 个数或内容不同即错误。23 与 2 3、02 与 2、2.0 与 2 均视为不同。A different token count or value is wrong. 23 vs 2 3, 02 vs 2, and 2.0 vs 2 all differ. |
| 输入Input | 标准输入,格式见题面。Standard input; format as in the statement. |
| 输出Output | 标准输出。Standard output. |
题目描述Description
在给出的有序数组中查找特定数值的 Lower Bound 和 Upper Bound,在有序数组中,它们的定义分别是:
- Lower Bound:对于给定的元素 \(x\),不小于 \(x\) 的第一个元素的位置
- Upper Bound:对于给定的元素 \(x\),大于 \(x\)的第一个元素的位置
输入格式Input
第一行 \(1 \leq n \leq 10^7\) 与 \(1 \leq m \leq 100\),表示 \(n\) 个元素的有序数组 \(a\) 和 \(m\) 次查询.
数组由如下代码定义:
for(int i = 0; i < n; i ++) {
a[i] = (i == 0 ? 0 : a[i - 1]) + (int)(100 * sin(n + i)) % 3;
}接下来 \(m\) 行每行一个整数表示查询的 \(x\).
输出格式Output
对于每个查询,输出空格隔开的 Lower Bound 和 Upper Bound
的数组下标,如果对应内容不存在则输出 -1.
样例Sample
出题Author
CSGrandeur