Cod sursa(job #1027136)

Utilizator MoneaVladMonea Vlad MoneaVlad Data 12 noiembrie 2013 14:16:51
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.89 kb
#include <fstream>
using namespace std;
ifstream in ("cautbin.in");
ofstream out ("cautbin.out");
int V[100];
int intrebare1(int st, int dr, int x)
{
    int mid,i;
    while(dr-st>1)
    {
        mid=st+(dr-st)/2;
        if(x==V[mid])
        {
            for(i=mid; i<=dr; i++)
            if(x!=V[i]) break;
            return i-1;
        }
            else
        {
            if(x<V[mid])
                dr=mid-1;
                else
                st=mid+1;}
    }
    if(x==V[dr])
        return dr;
        else
        return st;
    if(x!=V[dr] && x!=V[st])
        return -1;
}

int intrebare2(int st, int dr, int x)
{
    int mid,i;
    while(dr-st>1)
    {
        mid=st+(dr-st)/2;
        if(x==V[mid])
        {
            for(i=mid; i<=dr; i++)
                if(x<V[i]) break;
            return i-1;
        }
            else
        {
            if(x<V[mid])
                dr=mid-1;
                else
                st=mid+1;
        }
    }
    if(x==V[dr])
        return dr;
        else
        return st;
}

int intrebare3(int st, int dr, int x)
{
    int mid,i;
    while(dr-st>1)
    {
        mid=st+(dr-st)/2;
        if(x==V[mid])
        {
            for(i=mid; i>=st; i--)
                if(x>V[i]) break;
            return i+1;
        }
        else
        {
            if(x<V[mid])
                dr=mid-1;
                else
                st=mid+1;
        }
    }
    if(x==V[dr])
        return dr;
        else
        return st;
}

int main()
{
    int n,i,m,a,b;
    in>>n;
    for(i=1; i<=n; i++)
        in>>V[i];
    in>>m;
    for(i=1; i<=m; i++)
    {
        in>>a>>b;
        if(a==0)
            out<<intrebare1(1, n, b)<<"\n";
        if(a==1)
            out<<intrebare2(1, n, b)<<"\n";
        if(a==2)
            out<<intrebare3(1, n, b)<<"\n";

    }
}