Cod sursa(job #932276)

Utilizator stoicatheoFlirk Navok stoicatheo Data 28 martie 2013 20:07:05
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.6 kb
#include <iostream>
#include <fstream>
using namespace std;
int a[100001],n,x,y,i,k,ok,j,m,p;
int main()
{
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");
    fin>>n;
    for(i=1;i<=n;i++)fin>>a[i];
    fin>>m;
    for(k=1;k<=m;k++)
    {
        fin>>p>>x;
        i=1;j=n;ok=1;
        if(p==0)
        {
            do{
                y=(i+j)/2;
                if(a[y]==x)
                {
                    while(a[y+1]==x){y++;}
                    ok=0;
                }
                    else if(a[y]>x)j=y-1;
                            else i=y+1;
            }while((ok==1)&&(i<=j));
            if(ok==0)fout<<y<<"\n";
                else fout<<-1<<"\n";
        }
        if(p==1)
        {
            do{
                y=(i+j)/2;
                if(a[y]==x)
                {
                    while((a[y+1]<=x)&&(y<n)){y++;}
                    ok=0;
                }
                    else if(a[y]>x)j=y-1;
                            else i=y+1;
            }while((ok==1)&&(i<=j));
            if(ok==0)fout<<y<<"\n";
             else fout<<j<<"\n";

        }
        if(p==2)
        {
            do{
                y=(i+j)/2;
                if(a[y]==x)
                {
                    while(a[y-1]>=x){y--;}
                    ok=0;
                }
                    else if(a[y]>x)j=y-1;
                            else i=y+1;
            }while((ok==1)&&(i<=j));
            if(ok==0)fout<<y<<"\n";
                else fout<<i<<"\n";
        }
    }
    fin.close();
    fout.close();
    return 0;
}