Cod sursa(job #211185)

Utilizator raica_cristiraica dumitru cristian raica_cristi Data 1 octombrie 2008 08:23:33
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.15 kb
#include<fstream>

using namespace std;

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

long long unsigned a[100001];

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