Cod sursa(job #1836747)

Utilizator GeoeyMexicanuBadita George GeoeyMexicanu Data 28 decembrie 2016 17:09:31
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int i,j,s,d,k,t,p,r,n;
int* v;
int bin1(int s,int d,int* v,int x,int t)
{
    if(s>d)
        {
            return t;
        }
    else
    {
        int m=(s+d)/2;
        if(v[m]==x && m>t)
            t=m;
        if(v[m]>x)
            return bin1(s,m-1,v,x,t);
        else
            return bin1(m+1,d,v,x,t);
    }
}
int bin2(int s,int d,int* v,int x,int t)
{
    if(s>d)
    {
        return t;
    }
    else
    {
        int m=(s+d)/2;
        if(v[m]<=x && m>t)
            t=m;
        if(v[m]>x)
            return bin1(s,m-1,v,x,t);
        else
            return bin1(m+1,d,v,x,t);
    }
}
int bin3(int s,int d,int* v,int x,int t)
{
    if(s>d)
    {
        return t;
    }
    else
    {
        int m=(s+d)/2;
        if(v[m]>=x && m<t)
            t=m;
        if(v[m]>=x)
            bin3(s,m-1,v,x,t);
        else
            bin3(m+1,d,v,x,t);
    }
}
int main()
{
    f>>n;
    v=new int[n+4];
    for(i=1;i<=n;i++)
        f>>v[i];
    f>>k;
    while(k!=0)
    {
        f>>i>>j;
        if(i==0)
        {
            g<<bin1(1,n,v,j,-1)<<"\n";
        }
        else
            if(i==1)
            {
                g<<bin2(1,n,v,j,-1)<<"\n";
            }
            else
                if(i==2)
                {
                    g<<bin3(1,n,v,j,n)<<"\n";
                }
        k--;
    }
}