Cod sursa(job #398025)

Utilizator alex@ndraAlexandra alex@ndra Data 17 februarie 2010 20:59:34
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include<fstream>
#include<iostream>
using namespace std;


long a[100005], n, li, ls, mij,i, m,x,op;

int cautare0(int x)
{
   
    li=1;ls=n;
    
    while(li<=ls)
    {
      mij=(li+ls)/2;
      
      if(a[mij]<=x)
             li=mij+1;
      else ls=mij-1;
     }
     
     mij=(li+ls)/2;
   if (a[mij]>x) 
        mij --;
    if (a[mij] == x)
        return mij;

        return -1;
}

  int cautare1(int x)
{
    li=1;ls=n;
    
    while(li<ls)
    {
      mij=(li+ls)/2;
      
      if(a[mij]<=x)
             li=mij+1;
      else ls=mij;
     }
     mij=(li+ls)/2;
     if(a[mij]>x)
       mij--;
     return mij;
            
}  
    
  int cautare2(int x)
{
  
    li=1;ls=n;
    
    while(li<ls)
    {
      mij=(li+ls)/2;
      
      if(a[mij]<x)
             li=mij+1;
      else ls=mij;
     }
     mij=(li+ls)/2;
      if(a[mij]<x)
        mij++;

       return mij;
     
}
   
int main()
{
    ofstream g("cautbin.out");
    
    ifstream f("cautbin.in");
         f>>n;
      for(i=1;i<=n;i++)
         f>>a[i];
       f>>m;
    for(i=1;i<=m;i++)
    {
       f>>op>>x;
         if(op==0)
           g<<cautare0(x)<<"\n";
        else if(op==1)
           g<<cautare1(x)<<"\n";
        else g<<cautare2(x)<<"\n";
      
           
    }
f.close();
g.close();
return 0;

}