Cod sursa(job #1726196)

Utilizator elena.raduRadu Elena Maria elena.radu Data 7 iulie 2016 14:54:02
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.65 kb
#include <iostream>
#include <fstream>

void main()
{
    int n,li, ls, x, i, v[100000], m, in, ok;
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>n;

    for(i=1; i<=n; i++)
        f>>v[i];

    f>>m;
    while(m>0)
    {
        f>>in;
        f>>x;
        ok=0;
        li=1;
        ls=n;
        m=(n+1)/2;
        while(li<ls&&ok==0)
        {
            if(v[m]>x)
            {
                ls=m-1;
                m=(ls+li)/2;
            }
            else
                if(v[m]<x)
                {
                    li=m+1;
                    m=(li+ls)/2;
                }
                else
                    ok=1;
        }
        switch(in)
        {
            case 0:
            {
                if(ok==1)
                {
                    while(v[m]==x)
                        m++;
                    g<<m-1<<endl;
                }
                else
                    g<<-1<<endl;
                break;
            }
            case 1:
            {
                if(ok==1)
                {
                    while(v[m]==x)
                        m++;
                    g<<m-1<<endl;
                }
                else
                    g<<m<<endl;
                break;
            }
            case 2:
            {
                if(ok==1)
                {
                    while(v[m]==x)
                    m--;
                g<<m+1<<endl;
                }
                else
                    g<<m+1;
                break;
            }
        }
        m--;
    }
    f.close();
    g.close();
}