Cod sursa(job #1526608)

Utilizator kassay_akosKassay Akos kassay_akos Data 16 noiembrie 2015 21:59:38
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
#include <iostream>
#include <fstream>
using namespace std;

#define nmax 100002

int v[nmax] ,n ;

int cautareBinara0( int val)  {
    int el = 0,ve = n-1, mid;
    while (el <= ve ) {
        mid = (el + ve) / 2;
        if (v[mid] <= val)  el = mid+1;
        else                ve = mid-1;
    }
    mid = (el+ve)/2;
    if (v[mid] > val) mid--;
    if (v[mid] == val) {
        return mid+1;
    }
    return -1;
}

int cautareBinara1( int val)  {
    int el = 0,ve = n-1, mid;
    while (el < ve ) {
        mid = (el + ve) / 2;
        if (v[mid] <= val)  el = mid+1;
        else               ve = mid;
    }
    mid = (el+ve)/2;
    if (v[mid] > val) mid--;
    return mid+1;
}

int cautareBinara2( int val)  {
    int el = 0,ve = n-1, mid;
    while (el < ve ) {
        mid = (el + ve) / 2;
        if (v[mid] < val)  el = mid+1;
        else               ve = mid;
    }
    mid = (el+ve)/2;
    if (v[mid] < val) mid++;
    return mid+1;
}

int main()
{
    freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
    int m ;
	scanf("%d",&n);
	for ( int i = 0; i<n; i++ ) {
        scanf("%d",&v[i]);
	}
	scanf("%d",&m);

	int a,b;
	for ( int intrebari = 0; intrebari<m; intrebari++ ) {
        scanf("%d %d",&a, &b);

        if (a==0) {
            printf("%d\n",cautareBinara0(b));
        }
        else if (a==1) {
             printf("%d\n",cautareBinara1(b));
        }
        else {
            printf("%d\n",cautareBinara2(b));
        }
	}
	fclose(stdin);
	fclose(stdout);
    return 0;
}