Cod sursa(job #1732875)

Utilizator qxZapMilea Mihai qxZap Data 22 iulie 2016 20:24:39
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>

using namespace std;


int n,a[1000];

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

int binar_one(int l,int r,int val)
{
    int m;

    while(l<=r) {
        m=(l+r)/2;
        if (a[m]<=val)
            l=m+1;
        else
            r=m-1;
    }
    m=(l+r)/2;

    if (a[m]>val) m--;
    if (a[m]==val)
        return m;
    return -1;
}

int binar_doi(int l,int r,int val)
{
    int m,n=r;

    while(l<r)
    {
        m=(l+r)/2;
        if (a[m]<=val)
            l=m+1;
        else
            r=m;
    }

    m=(l+r)/2;
    if (a[m]>val)
       --m;
    return m;
}

int binar_trei(int l,int r,int val)
{
    int m;

    while (l < r) {
        m=(l+r)/2;
        if (a[m]<val)
            l=m+1;
        else
            r=m;
    }

    m=(l+r)/2;
    if (a[m]<val)
       ++m;
    return m;
}




int main()
{
    f>>n;
    int i,s,c,val;
    for(i=1;i<=n;i++)
        f>>a[i];
    f>>s;
    for(i=1;i<=s;i++)
    {
        f>>c>>val;
        if(c==0)
            g<<binar_one(1,n,val);
        else if(c==1)
            g<<binar_doi(1,n,val);
        else if(c==2)
            g<<binar_trei(1,n,val);
    }

}