Dada una matriz de enteros de longitud n en orden ascendente y q consultas.
Para cada consulta, devuelve la posición inicial y la posición final de un elemento k (la posición comienza a contar desde 0).
Si el elemento no existe en la matriz, se devuelve -1 -1.
Formato de entrada La
primera línea contiene los números enteros nyq, que indican la longitud de la matriz y el número de consultas.
La segunda línea contiene n números enteros (todos en el rango de 1∼10000), lo que representa una matriz completa.
En las siguientes q líneas, cada línea contiene un número entero k, que representa un elemento de consulta.
Formato de salida Hay
q líneas en total, cada línea contiene dos enteros, indicando la posición inicial y final del elemento a buscar.
Si el elemento no existe en la matriz, se devuelve -1 -1.
Rango de datos
1≤n≤100000
1≤q≤10000
1≤k≤10000
Ejemplo de entrada:
6 3
1 2 2 3 3 4
3
4
5
Salida de muestra:
3 4
5 5
-1 -1
Límite de tiempo / espacio: 1 s / 64 MB
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int num[N];
int main()
{
int n,q,k;
scanf("%d%d",&n,&q);
for(int i=0;i<n;i++){
scanf("%d",&num[i]);
}
while(q--){
scanf("%d",&k);
int l=0,r=n-1;
while(l<r){
int mid=l+r>>1;
if(k>num[mid]){
l = mid+1;
}else{
r = mid;
}
}
if(num[l]!=k){
printf("-1 -1\n");
}else{
printf("%d ",l);
int l=0,r=n-1;
while(l<r){
int mid=l+r+1>>1;
if(k<num[mid]){
r = mid-1;
}else{
l = mid;
}
}
printf("%d\n",l);
}
}
return 0;
}