El uso de búsqueda binaria STL

Búsqueda binaria STL

Usar objeto: matriz ordenada

Archivo de encabezado: algoritmo

El valor de retorno de lower_bound () es un iterador, volviendo a la posición del primer valor mayor o igual que la clave
. El límite de la matriz a en el parámetro de función, a + 8 se deja cerrado y se abre a la derecha. La dirección después de que la búsqueda falla (dirección fuera de límites)

    #include <algorithm>
    #include <iostream>
    using namespace std;
    int main()
    {
    
    
    	int a[]={
    
    1,2,3,4,5,7,8,9};
    	printf("%d",lower_bound(a,a+8,6)-a); 
    	
     return 0;	
    } 

Salida: 5

Cambie la clave a 10, todos los valores son menores que la clave, devuelva la posición del último

#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
    
    
	int a[]={
    
    1,2,3,4,5,7,8,9};
	printf("%d",lower_bound(a,a+8,10)-a); 
	
 return 0;	
} 

Salida: 8

función upper_bound (), devuelve el último elemento mayor o igual que la clave

Ejemplo : CF1077E
Código de CA:

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e6 + 7;

int a[maxn];
map<int, int> mp;

int main()
{
    
    
	int n;
	scanf("%d",&n);
	int cnt=0,x;
	for(int i=1;i<=n;i++)
    {
    
    
		scanf ("%d",&x);
		if(!mp[x])
		{
    
    
			mp[x]=++cnt;
		}
		++a[mp[x]];
	}
	sort(a+1,a+cnt+1);
	int sum=0;
	for(int j=1;j<=n;++j)
    {
    
    
		int m=0;
		int l=1;
		for (int k=j;k<=n;k*=2)
        {
    
    
			int p=lower_bound(a+l,a+cnt+1,k)-a;
			if(p==cnt+1)
                break;
            m+=k;
			l=p+1;
		}
		sum=max(sum,m);
	}
	printf ("%d\n",sum);
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_40534166/article/details/97633356
Recomendado
Clasificación