Cod sursa(job #226743)

Utilizator raica_cristiraica dumitru cristian raica_cristi Data 2 decembrie 2008 19:00:51
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 2.6 kb
#include<fstream>      
     
using namespace std;      
     
ifstream fin ("cautbin.in");      
ofstream fout ("cautbin.out");      
     
long long int a[100001];      
     
int main ()      
{    
    int n,i,k,c,x,min,z,max,m;   
    fin>>n;   
    z=1;   
    for(i=1;i<=n;i++)   
    fin>>a[i];   
    fin>>m;   
    ////   
    for(k=1;k<=m;k++)   
    {   
                     fin>>c>>x;   
                     min=1; max=n;z=0;   
    if(c==0)   
    {/////11111111111   
            while(x!=a[z])   
            {   
                          z=(min+max)/2;   
                          if(a[z]<x)   
                          min=z+1;   
                          else   
                          max=z-1;   
                          if(a[z]==x)   
                          {   while(a[z+1]==a[z])
                          z++;
                                     fout<<z<<"\n";   
                          break;   
                          }   
            if(min>max)   
            break;   
                          }if(a[z]!=x)   
                          fout<<"-1\n";   
                          }//111111111   
    else   
    if(c==1)   
    {////22222222   
            while(x!=a[z])   
            {if(min>max)   
            break;   
                          z=(min+max)/2;   
                          if(a[z]<x)   
                          min=z+1;   
                          else   
                          max=z-1;   
                          if(a[z]==x)   
                          {   
                                     fout<<z<<"\n";   
                          break;   
                          }while(a[z]>x)   
                          z--;   
                          }if(a[z]!=x)   
                          fout<<z<<"\n";   
                          }///////2222222   
    else   
    if(c==2)   
    {///33333333   
            while(x!=a[z])   
            {if(min>max)   
            break;   
                          z=(min+max)/2;   
                          if(a[z]<x)   
                          min=z+1;   
                          else   
                          max=z-1;   
                          if(a[z]==x)   
                          {   
                                     fout<<z<<"\n";   
                          break;   
                          }   
                          }while(a[z]<x)   
                          z++;   
                          if(a[z]!=x)   
                          fout<<z<<"\n";   
                          }   
}   
return 0;   
}