Cod sursa(job #1052328)

Utilizator handz.FMI Andrei Tanasescu handz. Data 11 decembrie 2013 02:15:43
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.25 kb
#include <iostream>
#include <fstream>
using namespace std;

#define maxInput 100005

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

int n,m,v[maxInput];

int bin(int p,int q,int x)
{
    int mij;
    if(p==q)
    {
        if(x==v[p]) return p;
        else return 0;
    }
    else
    {
        mij=(p+q)/2;
        if(x==v[mij]) return mij;
        else
        {
            if(x>v[mij])
            {
                bin(mij+1,q,x);
            }
            else
            {
                bin(p,mij-1,x);
            }
        }
    }
}

int main()
{
    int i,j,t,x,re,stop; f>>n;
    for(i=1; i<=n ;i++)
        f>>v[i];

    f>>m;
    for(i=1; i<=m ;i++)
    {
        f>>t; f>>x;
        switch(t)
        {
            case 0:
                    re=bin(1,n,x);
                    if(re)
                    {

                        stop=0; j=re;
                        while(j<=n && !stop)
                        {
                            if(v[j]!=x) stop=1;
                            else j++;
                        }
                        re=j-1;
                        g<<re<<endl;
                    }
                    else g<<-1<<endl;
            break;

            case 1:
                    if(v[n]<=x) g<<n<<endl;
                    else
                    {
                        re=bin(1,n,x);
                        stop=0; j=re;
                        while(j<=n && !stop)
                        {
                            if(v[j]!=x) stop=1;
                            else j++;
                        }
                        re=j-1;
                        g<<re<<endl;
                    }
            break;

            case 2:
                    if(v[1]>=x) g<<1<<endl;
                    else
                    {
                        re=bin(1,n,x);
                        stop=0; j=re;
                        while(j>1 && !stop)
                        {
                            if(v[j]!=x) stop=1;
                            else j--;
                        }
                        re=j+1;
                        g<<re<<endl;
                    }
            break;
        }
    }

    return 0;
}