Cod sursa(job #211225)

Utilizator raica_cristiraica dumitru cristian raica_cristi Data 1 octombrie 2008 13:27:36
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.68 kb
#include<fstream>

using namespace std;

ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");

long long int a[100001];

int main ()
{
    long long int x,y,i,n,m,min,max,z;
    fin>>n;
    for(i=1;i<=n;i++)
    fin>>a[i];
    fin>>m;
            for(i=1;i<=m;i++)
    {       z=(n+1)/2;
            min=1;
            max=n;
    fin>>y;
            if(y==0)
    {
                fin>>x;
            
            while(a[z]!=x)
            {
              if(a[z]<a[max])
              max=z-1;
              else
              min=z+1;
              if(min>=max)
            { fout<<"-1\n";
               break;}z=min+(max-min)/2;   fout<<z<<"\n"; 
                    }
}

            else
            if(y==1)
            {
                    fin>>x;
            while(a[z]!=x)
            {
              if(a[z]<a[max])
              max=z-1;
              else
              min=z+1;
              if(min>=max)
            { fout<<z-1<<"\n";
            break;
                               }
                               z=min+(max-min)/2;
                               }
            fout<<z<<"\n";
            }
            else
            if(y==2)
            {
                    while(a[z]!=x)
            {
              if(a[z]<a[max])
              max=z-1;
              else
              min=z+1;
              if(min>=max)
            {
                          if(x-a[z-1]>a[z+1]-x)
                    fout<<z+1<<"\n";
                          else
                    fout<<z-1<<"\n";
            break;}
            z=min+(max-min)/2;}
                        }
            }
            return 0;
}