祭祖网站怎么做,泰安房源最新出售,建立一个平台需要什么,做网站书籍目录
1.题目描述
2.AC 1.题目描述
问题 E: 起止位置
时间限制: 1.000 Sec 内存限制: 128 MB提交 状态
题目描述
有n位同学按照年龄从小到大排好队。 王老师想要查询#xff0c;年龄为x的同学#xff0c;在队伍中首次出现的位置和最后一次出现的位置#xff1b;如果队…目录
1.题目描述
2.AC 1.题目描述
问题 E: 起止位置
时间限制: 1.000 Sec 内存限制: 128 MB提交 状态
题目描述
有n位同学按照年龄从小到大排好队。 王老师想要查询年龄为x的同学在队伍中首次出现的位置和最后一次出现的位置如果队伍中不存在年龄为x的同学请输出-1。 由于人数太多一个一个数太慢啦请你编程求解。 请注意本题中王老师查询年龄x出现的起止位置并不是查询了1次而是查询了q次。 比如 假设有6位同学的年龄为1 2 2 2 3 3王老师查询了4个年龄分别是2 1 3 8那么 年龄为2的同学首次和最后一次出现的位置分别是2 4 年龄为1的同学首次和最后一次出现的位置分别是1 1 年龄为3的同学首次和最后一次出现的位置分别是5 6 年龄为8的同学首次和最后一次出现的位置分别是-1 -1
输入
第一行包含整数n和q表示队伍中的总人数和询问个数。 第二行包含n个整数均在1~10000范围内表示队伍中每个人的年龄。 接下来q行每行包含一个整数x表示一次询问的值。
输出
共q行每行包含两个整数表示所求年龄在队伍中的起始位置和终止位置。 如果数组中不存在该元素则返回-1 -1。 数据范围 1≤n≤100000 1≤q≤10000 1≤x≤10000
样例输入 Copy
6 3
1 2 2 2 3 3
2
1
8
样例输出 Copy
2 4
1 1
-1 -1
2.AC
#include iostream
#include cstdio
using namespace std;
int n, q;
int a[100005];
int main () {scanf(%d%d, n, q);for (int i 1; i n; i) {scanf(%d, a[i]);}for (int i 1; i q; i) {int x;scanf(%d, x);int l 1, r n;while (l r) {int mid l (r - l) / 2;if (x a[mid]) {l mid 1;} else if (x a[mid]) {r mid;}}if (a[r]x) printf(%d, r);else printf(-1);printf( );l 1, r n;while (l r) {int mid l (r - l) / 2;if (x a[mid]) {l mid 1;} else if (x a[mid]) {r mid - 1;}}if (a[r]x) printf(%d, r);else printf(-1);printf(\n);}
}