Cod sursa(job #1772021)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 6 octombrie 2016 14:06:41
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.18 kb
#include <fstream>
#include <iostream>

using namespace std;

int main()
{
    ifstream fin ("cautbin.in");
    ofstream fout ("cautbin.out");
    int n;
    fin>>n;
    int v[n+1];
    for (int i=1;i<=n;++i)
    {
        fin>>v[i];
    }
    int b;
    fin>>b;
    for (int i=0;i<b;++i)
    {
            int a,x;
            fin>>a>>x;
            int s=1,d=n,sol=-1;
            switch (a)
            {
            case 0 :sol=-1;
            while (s<=d)
            {
                int mij=(d+s)/2;
                 if (x>v[mij])
                {
                    s=mij+1;
                }
                else
                {
                    if (v[mij]==x)
                    {
                        sol=mij;
                        if (v[mij+1]!=x)
                        {
                            break;
                        }
                        else
                        {
                            while (v[mij+1]==x)
                            {
                                mij++;
                            }
                        }
                        sol=mij;
                        break;
                    }
                    else
                    {
                    d=mij-1;
                    }
                }
            }
            fout<<sol<<"\n";
            break;


            case 1 :
            while (s<=d)
            {
                int mij=(d+s)/2;
                 if (x>=v[mij])
                {
                   s=mij+1;
                   sol=mij;
                }
                    else
                    {
                    d=mij-1;
                    }
            }
            fout<<sol<<"\n";
            break;


            case 2 :
            while (s<=d)
            {
                int mij=(d+s)/2;
                 if (x>v[mij])
                {

                    s=mij+1;
                }
                    else
                    {
                    d=mij-1;
                    sol=mij;
                    }
            }
            fout<<sol<<"\n";
            break;
            }
    }
}