Cod sursa(job #1526465)

Utilizator kassay_akosKassay Akos kassay_akos Data 16 noiembrie 2015 19:22:17
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
using namespace std;

#define nmax 100002

int v[nmax] ,n ;

int cautareBinara( int val)  {
    int el = 0,ve = n-1, mid;

    while (el+1 <= ve ) {
        mid = (el + ve) / 2;
        if (v[mid] == val)      return mid;
        else if (v[mid] < val)  el = mid;
        else                    ve = mid;
    }
    return mid;
}
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);

        int x = cautareBinara(b);

        if (a==0) {
            while (v[x] == b && x < n) x++;
            printf("%d\n",v[x-1]==b ? x :-1);
        }
        else if (a==1) {
             while (v[x] > b && x > 0) x--;
             while (v[x] <= b && x < n) x++;
            printf("%d\n",x);
        }
        else {
            while (v[x] < b && x < n) x++;
            while (v[x] >= b && x > 0) x--;
            printf("%d\n",x+2);
        }
	}
	fclose(stdin);
	fclose(stdout);
    return 0;
}