Cod sursa(job #2082663)

Utilizator marcogoldPop Mihali Marco Silviu marcogold Data 6 decembrie 2017 17:45:59
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
#include <iostream>
#include <fstream>
using namespace std;

int n,a[100001],m,t,x;

ifstream fi("cautbin.in");
ofstream fo("cautbin.out");


void citire()
{
    fi>>n;

    for(int i=1; i<=n; i++)
        fi>>a[i];
    fi>>m;
}


int cautBinara0(int x)
{
    int st,dr,mid;
    dr=n;
    st=1;

    mid=(st+dr)/2;
    while(st<=dr)
    {

        if(x==a[mid] && a[mid+1]!=a[mid])
            return mid;
        else if(x>=a[mid])
            st=mid+1;
        else if(x<a[mid])
            dr=mid-1;

        mid=(st+dr)/2;
    }
    return -1;
}

int cautBinara1(int x)
{

    int st,dr,mid;
    dr=n;
    st=1;

    mid=(st+dr)/2;
    while(st<=dr)
    {

        if(x==a[mid] && a[mid+1]!=a[mid])
            return mid;
        else if(x>=a[mid])
            st=mid+1;
        else if(x<a[mid])
            dr=mid-1;

        mid=(st+dr)/2;

    }
    return st-1;
}

int cautBinara2(int x)
{
    int st,dr,mid;
    dr=n;
    st=1;

    mid=(st+dr)/2;
    while(st<=dr)
    {

        if(x==a[mid] && a[mid-1]!=a[mid])
            return mid;
        else if(x>a[mid])
            st=mid+1;
        else if(x<=a[mid])
            dr=mid-1;

        mid=(st+dr)/2;
    }
    return st;
}


int main()
{
    citire();

    while(m)
    { fi>>t;
     fi>>x;
        //if(t==0) fo<<cautBinara0(x)<<endl;
        //if(t==1) fo<<cautBinara1(x)<<endl;
       // if(t==2) fo<<cautBinara2(x)<<endl;
        m--;
    }


    return 0;
}