Cod sursa(job #211184)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 1 octombrie 2008 08:19:51
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include<stdio.h>   
int n,m,x,a[100001];   
int bin(int n,int x){   
    int st,dr,k;   
    st=1;   
    dr=n;   
    while(st<=dr){
        k=(st+dr)/2;   
        if(a[k]<x)   
            st=k+1;   
        else if(a[k]>x) 
	    dr=k-1;
	    else
		    return k;}   
    return k;}   
void solve(){   
    int i,q,poz,k;   
    scanf("%d",&n);   
    for(i=1; i<=n; ++i)   
        scanf("%d",&a[i]);   
    scanf("%d",&m);   
    for(i=1; i<=m; ++i){   
        scanf("%d%d",&q,&x);   
        poz=bin(n,x);   
        if(q==0)   
            if(a[poz]==x){
                while(a[poz+1]==x&&poz<=n)
                    ++poz;   
                printf("%d\n",poz);}   
            else  
                printf("-1\n");   
        if(q==1)   
            if(a[poz]==x){
                while(a[poz+1]==x&&poz<=n)
                    ++poz;   
                printf("%d\n",poz-1);}   
            else{   
                while(a[poz]>x&&poz<=n)   
                    --poz;   
                printf("%d\n",poz);}   
        if(q==2)   
            if(a[poz]==x){
                while(a[poz-1]==x&&poz<=n)
                    --poz;
                printf("%d\n",poz+1);}   
            else{   
                while(a[poz]<x&&poz<=n)   
                    ++poz;   
                printf("%d\n",poz);}}}   
int main(){   
    freopen("cautbin.in","r",stdin);   
    freopen("cautbin.out","w",stdout);   
    solve();   
    return 0;}