Cod sursa(job #1022769)

Utilizator jul123Iulia Duta jul123 Data 5 noiembrie 2013 22:25:56
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.64 kb
#include<iostream>
#include<fstream>
using namespace std;
int v[1000];
int binary_search0(int x, int left, int right)
{
    int m;
    if(left<=right)
        {
        m=left+(-left+right)/2;
        if (v[m]<=x)
                return binary_search0(x, m+1, right);
            else
                return binary_search0(x, left,m-1);}
    if(v[right]==x)
        return right+1;
    if(v[m]>x)
        return right;
        return -1;
}
int binary_search1(int x, int left, int right )
    {
        int m;
        if(left<right)
        {
            m=left+(-left+right)/2;
            if(v[m]<=x)
                return binary_search1(x,m+1,right);
            else
                return binary_search1(x,left,m);
        }
        if(v[right]>x)
            return right;
        else
            return right+1;

    }

int binary_search2(int x, int left, int right)
{
        int m;
        if(left<right)
        {
            m=left+(-left+right)/2;
            if(v[m]<x)
                return binary_search2(x,m+1,right);
            else
                return binary_search2(x,left,m);
        }
        if(v[right]<x)
            return right+2;
        else
            return right+1;
}

int main()
{
    int n,i,m,x,y;
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>n;
    for(i=0;i<n;i++)
        f>>v[i];
    f>>m;
    for(i=0;i<m;i++)
    {
        f>>x>>y;
        if(x==0)
            g<<binary_search0(y,0,n-1);
        if(x==1)
            g<<binary_search1(y,0,n-1);
        if(x==2)
            g<<binary_search2(y,0,n-1);
        g<<"\n";
    }
}