Cod sursa(job #1021316)

Utilizator andreeaghetuUNIBUC andreeaghetu andreeaghetu Data 3 noiembrie 2013 17:37:32
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("cautbin.in");
ofstream out ("cautbin.out");
int N, v[100005], M, t, x;
int subprogram (int x)
{
    int a=1, b=N, m;
    while (1)
    {
        if (a>b)
        {
            if (!t) return -1;
            if (t==1) return b;
            if (t==2) return a;
        }
        m=(a+b)/2;
        if (v[m]==x)
            return m;
        if (v[m]>x)
                b=m-1;
        else
                a=m+1;
    }
}

int main()
{
    int poz;
    in>>N;
    for (int i=1;i<=N;++i)
        in>>v[i];
    in>>M;
    for (int i=0;i<M;++i)
    {
        in>>t;
        in>>x;
        poz=subprogram(x);
        switch(t)
        {
        case 0:
            if (v[poz+1]==x)
            {
                while (v[poz]==x && poz<N)
                    ++poz;
            }
            out<<poz<<'\n';
            break;
        case 1:
            if (v[poz+1]==x)
            {
                while (v[poz]==x && poz<N)
                        ++poz;
            }
            out<<poz<<'\n';
            break;
        case 2:
            if (v[poz-1]==x)
            {
            while (v[poz]==x && v[poz-1]==x && poz>=1)
                --poz;
            }
            out<<poz<<'\n';
            break;
        }
    }
}