Cod sursa(job #1072828)

Utilizator dumytruKana Banana dumytru Data 4 ianuarie 2014 22:37:35
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include <stdio.h>
#define Nmax 100000

using namespace std;
unsigned v[Nmax],n;

unsigned cautare_binara(unsigned x,unsigned mod,unsigned low,unsigned high)
{
    unsigned m = low/2 + high/2;
    if(low==high || v[m]==x)
    {
        if(mod==0)
        {
            if(v[m]==x)
            {
                while(v[m]==x)
                {
                    m++;
                }
                return --m;
            }
            else
            {
                return -1;
            }
        }
        else if(mod==1)
        {
            while(v[m]>x)
            {
                m--;
            }
            while(v[m]==x)
            {
                m++;
            }
            return --m;
        }
        else if(mod==2)
        {
            while(v[m]<x)
            {
                m++;
            }
            while(v[m]==x)
            {
                m--;
            }
            return ++m;
        }

    }
    else
    {
        if(v[m]>x)
        {
            cautare_binara(x,mod,low,m);
        }
        else if(v[m]<x)
        {
            cautare_binara(x,mod,low,m);
        }
    }
    return -1;
}

int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    unsigned i,nr,a,b;
    scanf("%u",&n);
    for(i=1;i<=n;i++)
        scanf("%u",&v[i]);

    scanf("%u",&nr);
    for(i=1;i<=nr;i++)
    {
        scanf("%u %u",&a,&b);
        printf("%d\n",cautare_binara(b,a,1,n));
    }
    return 0;
}