Cod sursa(job #1819767)

Utilizator GeoeyMexicanuBadita George GeoeyMexicanu Data 30 noiembrie 2016 19:58:54
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int bin1(int s,int d,int* x,int val)
{
    if(s<=d)
    {
        for(int t=d;t>=s;t--)
            if(val==x[t])
            return t;
        return -1;
    }
    int mid=(s+d)/2;
    if(x[mid]<=val)
        return bin1(mid,d,x,val);
    return bin1(s,mid-1,x,val);
}
int bin2(int s,int d,int* x,int val)
{
    if(s<=d)
    {
        for(int t=d;t>=s;t--)
            if(val>=x[t])
            return t;
    }
    int mid=(s+d)/2;
    if(x[mid]<=val)
        return bin2(mid,d,x,val);
    else
        return bin2(s,mid-1,x,val);
}
int bin3(int s,int d,int* x,int val)
{
    if(s<=d)
    {
        for(int t=s;t<=d;t++)
            if(x[t]>=val)
            return t;
    }
    int mid=(s+d)/2;
    if(x[mid]>=val)
        return bin3(mid,d,x,val);
    else
        return bin3(s,mid-1,x,val);
}
int i,j,n,poz,k;
int main()
{
    int tip1,val1;
    f>>n;
    int* v=new int[n+5];
    for(i=1;i<=n;i++)
        f>>v[i];
    f>>k;
    for(i=1;i<=k;i++)
    {
        f>>tip1>>val1;
        if(tip1==0)
            g<<bin1(1,n,v,val1)<<'\n';
        else
            if(tip1==1)
            g<<bin2(1,n,v,val1)<<'\n';
            else
                if(tip1==2)
                g<<bin3(1,n,v,val1)<<'\n';
    }
}