Cod sursa(job #624882)

Utilizator sebii_cSebastian Claici sebii_c Data 22 octombrie 2011 23:52:49
Problema Cautare binara Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#define NMAX 100005

int A[NMAX];
int n;

int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);
    int i, val, nr, type, step, lg;
    scanf("%d", &n);
    for (i=0; i<n; ++i)
        scanf("%d", &A[i]);
    scanf("%d", &nr);
    for (step=1; step<=n; step<<=1);
    while (nr--) {
        scanf("%d %d", &type, &val);
        if (type < 2) {
	for (lg=step, i=0; lg; lg>>=1)
	    if (i+lg<=n && A[i+lg]<=val)
	        i+=lg;
	if (!type && A[i] != val)
	    printf("-1\n");
	else 
	    printf("%d\n", i+1);
        }
        else {
	for (lg=step, i=n; lg; lg>>=1)
	    if (i-lg>0 && A[i-lg]>=val)
	        i-=lg;
	printf("%d\n", i+1);
        }

    }
    return 0;
}