Rango de números (C ++)

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;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_51430516/article/details/115206874
Recomendado
Clasificación