Cod sursa(job #561707)

Utilizator spadasinoIulian spadasino Data 21 martie 2011 11:45:04
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include<iostream>
#include<stdio.h>
using namespace std;

int v[100],n;

int caut1 (int x, int st, int dr)
{ int mij = (st + dr )/2;  
  
  if( dr < st) return -1;
  if( dr == st )
	  if( v[ st ] == x ) return st;
	  else return -1;
  if( dr == st + 1 )
  {
	  if( v[ dr ] == x ) return dr;
	  if( v[ st ] == x ) return st;
	  return -1;
  }
				
  
  if (x == v[mij])return caut1( x, mij, dr);
  if (x > v[mij])return caut1(x, mij + 1, dr);
  if( x < v[ mij ])return caut1( x, st, mij-1);            
 
  
}

int caut2 (int x, int st, int dr)
{ int mij = ( st + dr )/2;
 
 if( st == dr ) return st;
 if( st == dr - 1) 
	 if( v[ dr ] <= x ) return dr;
	 else return st;

 if (x >= v[mij])return caut2( x, mij, dr);
 if( x < v[ mij ])return caut2( x, st, mij - 1);      

}

int caut3 (int x, int st, int dr)
{ int mij = ( st + dr )/2;

 if(st == dr) return st;

 if ( x <= v[mij]) return caut3 (x, st , mij );
 if ( x > v[mij] ) return caut3 (x, mij+1 , dr );


}


int main()
{ int i,x;

freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);

cin>>n;

for (i=1;i<=n;++i)
scanf("%d",&v[i]);

int meniu,nr;

cin>>nr;

  for(i=1;i<=nr;i++)
  {   
	cin>>meniu;
    cin>>x;


   if(meniu==0)cout<<caut1(x,1,n)<<endl;
   if(meniu==1)cout<<caut2(x,1,n)<<endl;
   if(meniu==2)cout<<caut3(x,1,n)<<endl;
   //cout<<caut3(x,1,n)<<endl;
  
   
  }


}