Cod sursa(job #1585984)

Utilizator Mihai9Oniga Mihai Mihai9 Data 31 ianuarie 2016 17:39:24
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
using namespace std;
int x0( int x, int k );
int x1( int x );
int n, v[100005];
int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    int m, i, j, k, x;
    scanf("%d",&n);
    for( i = 1; i <= n; ++i ) scanf("%d",&v[i]);
    scanf("%d",&m);
    for( i = 1; i <= m; ++i ){
        scanf("%d%d",&k,&x);
        if( k <= 1 )printf("%d\n",x0(x,k));
        else printf("%d\n",x1(x));
    }
    return 0;
}
int x0( int x, int k ){

    int i, pas;
    i = 0;
    pas = 1 << 16;
    while( pas ){
        if( i + pas <= n && v[i+pas] <= x ) i += pas;
        pas /= 2;
    }
    if( v[i] == x || k == 1 ) return i;
    else return -1;
}
int x1( int x ){

    int i, pas;
    i = 0;
    pas = 1 << 16;

    while( pas ){
        if( i + pas <= n && v[i+pas] < x ) i += pas;
        pas /= 2;
    }
    return i + 1;
}