Cod sursa(job #1272644)

Utilizator eneandradaEne Oana-Andrada eneandrada Data 22 noiembrie 2014 14:16:49
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int N,M,i,x,tip;
long v[100005];

int tip0(int st, int dr, int x)
{
    if(st>dr)
        return -1;
    int m=(st+dr)/2;
    if(v[m]==x && tip0(m+1,dr,x)==-1)
        return m;
    if(v[m]<=x)
        return tip0(m+1,dr,x);
    if(v[m]>x)
        return tip0(st,m-1,x);
}

int tip1(int st, int dr, int x)
{
    if(st>dr)
        return dr;
    int m=(st+dr)/2;
    if(v[m]<=x)
        return tip0(m+1,dr,x);
    if(v[m]>x)
        return tip1(st,m-1,x);
}

int tip2(int st, int dr, int x)
{
    if(st>dr)
        return st;
    int m=(st+dr)/2;
    if(v[m]<x)
        return tip2(m+1,dr,x);
    if(v[m]>=x)
        return tip2(st,m-1,x);
}

int main()
{
    f>>N;
    for(i=1;i<=N;i++)
        f>>v[i];
    f>>M;
    for(i=1;i<=M;i++)
    {
        f>>tip>>x;
        if(tip==0)
            g<<tip0(1,N,x)<<"\n";
        if(tip==1)
            g<<tip1(1,N,x)<<"\n";
        if(tip==2)
            g<<tip2(1,N,x);
    }
    f.close();
    g.close();
    return 0;
}