Cod sursa(job #1358708)

Utilizator BogdanisarBurcea Bogdan Madalin Bogdanisar Data 24 februarie 2015 19:19:14
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int N,M,i,j,op,x,poz;
int v[100002];

int bs(int,int);

int main()
{
    f>>N;
    for (i=1;i<=N;++i)
        f>>v[i];
    f>>M;
    for (j=0;j<M;++j)
    {
        f>>op>>x;
        poz=bs(1,N);
        //cout<<poz<<' ';
        if (op==0)
        {
            if (v[poz]==x)
                g<<poz<<'\n';
            else
                g<<-1<<'\n';
        }
        else if (op==1)
        {
            if (v[poz]==x)
            {
                while(v[poz+1]==x)
                    ++poz;
                g<<poz<<'\n';
            }
            else
            {
                while (v[poz]>x)
                    --poz;
                g<<poz<<'\n';
            }
        }
        else
        {
            if (v[poz]==x)
            {
                while(v[poz-1]==x)
                    --poz;
                g<<poz<<'\n';
            }
            else
            {
                while (v[poz]<x)
                    ++poz;
                g<<poz<<'\n';
            }
        }
    }
    f.close();g.close();
    return 0;
}


int bs(int st,int dr)
{
    if (st<dr)
    {
        int mij=(st+dr)/2;
        if (x==v[mij])
        {
            return mij;
        }
        if (x<v[mij])
            return bs(st,mij-1);
        else
            return bs(mij+1,dr);
    }
    else
        return st;
}