Cod sursa(job #1106971)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 13 februarie 2014 14:57:03
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.16 kb
#include <stdio.h>
#include <stdlib.h>
int v[100002];
int main()
{
    int x,a,b,i,n;
    long long s,m,d;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d",&n);
    for(i=1; i<=n; i++)
        scanf("%d",&v[i]);
    scanf("%d",&x);
    for(i=0; i<x; i++){
        scanf("%d%d",&a,&b);
        s=1;
        d=n+1;
        while(abs(d-s)>1){
            m=(s+d)/2;
            if(b<v[m])
                d=m;
            else
                s=m;
        }
        m=s;
        switch(a){
            case 0:{
                if(v[m]!=b)
                    printf("-1 ");
                else
                    printf("%lld ",m);
                break;
            }
            case 1:{
                    printf("%lld ",m);
                break;
            }
            case 2:{
                if(v[m]!=b)
                    printf("%lld ",m+1);
                else{
                    while(v[m]==b)
                        m--;
                    m++;
                    printf("%lld ",m);
                }
                break;
            }
        }
    }

    return 0;
}