Cod sursa(job #1512731)

Utilizator NicuCJNicu B. NicuCJ Data 28 octombrie 2015 16:05:23
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>

using namespace std;

int cautare_binara(int st,int dr, int a[],int k){
	if (st>dr)
		return -1;
	int mij=(st+dr)/2;
	if (a[mij]==k && a[mij+1]!=k){
		return mij;
	}
	if (a[mij]<k)
		return cautare_binara(mij+1,dr,a,k);
	if (a[mij]>k)
		return cautare_binara(st,mij-1,a,k);
    if (a[mij]==k && a[mij+1]==k)
        return cautare_binara(mij,dr,a,k);
}

int cautare_binara2(int st,int dr, int a[],int k){
	if (st>dr)
		return -1;
	int mij=(st+dr)/2;
	if (a[mij]==k && a[mij-1]!=k){
		return mij;
	}
	if (a[mij]<k)
		return cautare_binara(mij+1,dr,a,k);
	if (a[mij]>k)
		return cautare_binara(st,mij-1,a,k);
    if (a[mij]==k && a[mij-1]==k)
        return cautare_binara2(st,mij,a,k);
}

int main()
{
    int n, a[100001],m,intrebare,nr,i;
    ifstream f ("cautbin.in");
    ofstream g ("cautbin.out");
    f>>n;
    for (i=1;i<=n;i++)
    {
        f>>a[i];
    }
    f>>m;
    for (i=1;i<=m;i++)
    {
        f>>intrebare>>nr;
        if (intrebare==0)
        {
            g<<cautare_binara(1,n,a,nr)<<"\n";
        }
        if (intrebare==1)
        {
            g<<cautare_binara(1,n,a,nr)<<"\n";
        }
        if (intrebare==2)
        {
            g<<cautare_binara2(1,n,a,nr)<<"\n";
        }
    }
    return 0;
}