Cod sursa(job #441623)

Utilizator horiama1Mania Horia horiama1 Data 12 aprilie 2010 23:45:22
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <stdio.h>

using namespace std;

int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    int n,m,i,v[100000],q,x,s,d,r;
    scanf("%d",&n);
    for(i=0 ; i<n ; i++)
        scanf("%d",&v[i]);
    scanf("%d",&m);
    for(i=0 ; i<m ; i++)
    {
        scanf("%d%d", &q,&x);
        if(q == 0)
        {
            r = -1;
            s = 0;
            d = n-1;
            while(s < d-1)
            {
                if(v[(s+d)/2] == x)
                {
                    r = (s+d)/2;
                }
                if(x >= v[(s+d)/2])
                    s= (s + d)/2;
                else
                    d= (s + d)/2;
            }
            printf("%d\n",r+1);
        }
        if(q == 1)
        {
            r = -1;
            s = 0;
            d = n-1;
            while(s < d-1)
            {
                if(v[(s+d)/2] <= x)
                {
                    r = (s+d)/2;
                }
                if(x>= v[(s+d)/2])
                    s= (s + d)/2;
                else
                    d= (s + d)/2;
            }
            printf("%d\n",r+1);
        }
        if(q == 2)
        {
            r = -1;
            s = 0;
            d = n-1;
            while(s < d-1)
            {
                if(v[(s+d)/2] >= x)
                {
                    r = (s+d)/2;
                }
                if(x <= v[(s+d)/2])
                    d= (s + d)/2;
                else
                    s= (s + d)/2;
            }
            printf("%d",r+1);
        }
    }
    return 0;
}