Cod sursa(job #1584893)

Utilizator din99danyMatei Daniel din99dany Data 30 ianuarie 2016 16:31:05
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 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 0;

}

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;

}