Cod sursa(job #1165061)

Utilizator clopotelNeamtu Sergiu clopotel Data 2 aprilie 2014 13:59:34
Problema Cautare binara Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,a[100002],x,t,m;
int cautare0(int x, int st, int dr)
{
    if(st==dr)
        {
            while(a[st+1]==x)
                st++;
            if(a[st]!=x)
                return -1;
            else
            return st;
        }
    int m=(st+dr)/2;
    if(x>a[m])
        return cautare0(x,m+1,dr);
    else
        return cautare0(x,st,m);
}
int cautare1(int x, int st, int dr)
{
    if(st==dr)
        {
            while(a[st+1]==x)
                st++;
            if(a[st]!=x)
                return st-1;
            return st;
        }
    int m=(st+dr)/2;
    if(x>a[m])
        return cautare1(x,m+1,dr);
    else
        return cautare1(x,st,m);
}
int cautare2(int x, int st, int dr)
{
    if(st==dr)
        {
            while(a[st-1]==x)
                st--;
            return st;
        }
    int m=(st+dr)/2;
    if(x>a[m])
        return cautare2(x,m+1,dr);
    else
        return cautare2(x,st,m);
}
int main()
{
    fin>>n;
    for(int i=1; i<=n; i++)
        fin>>a[i];
    fin>>m;
    for(int i=0; i<m; i++)
    {
        fin>>t>>x;
        switch (t)
        {
        case 0:
            fout<<cautare0(x,1,n)<<'\n';
            break;
        case 1:
            fout<<cautare1(x,1,n)<<'\n';
            break;
        case 2:
            fout<<cautare2(x,1,n)<<'\n';
            break;
        }
    }
    return 0;
}