Cod sursa(job #2063023)

Utilizator gundorfMoldovan George gundorf Data 11 noiembrie 2017 01:40:23
Problema Cautare binara Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#define Nmax 100003
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout("cautbin.out");
int n,v[Nmax];
int Cautare_Binara (int s,int d,int x)
{
    int i,j,mij=0;
    i=s;
    j=d;
    while (i<=j)
    { mij=(i+j)/2;
    if (v[mij]==x) return mij;
    else if (x<v[mij]) j=mij-1;
            else if (x>v[mij]) i=mij+1;

    }
 return i;
}

int main()
{
    int i,k,x,y;
    fin>>n;
    for (i=1;i<=n;i++)
        fin>>v[i];
    fin>>k;
    for (i=1;i<=k;i++)
    { int p;
        fin>>x>>y;
        if (x==0)
        {
            p=Cautare_Binara(1,n,y);
            if (v[p]==y)
            {while (v[p+1]==y) p++;
            fout<<p<<"\n";}
            else fout<<"-1\n";
        }
        if (x==1)
        {
             p=Cautare_Binara(1,n,y);
            if (v[p]<=y)
             while (v[p+1]<=y&&p<n) p++;
             else if (v[p]>y)
                {while (v[p-1]>y) p--;
             p--;}
             fout<<p<<"\n";

        }
        if (x==2)
        {
            p=Cautare_Binara(1,n,y);
            //fout<<p<<"\n";
            if (v[p]>=x)
            while (v[p-1]>=y&&p>1) p--;
            else if (v[p]<x)
                {while (v[p+1]<x) p++;
            p++;}
             fout<<p<<"\n";
        }
    }
    return 0;
}