Cod sursa(job #392701)

Utilizator preda_alexandruPreda Alexandru preda_alexandru Data 8 februarie 2010 01:35:53
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<fstream.h>
#include<iostream.h>

long v[100001],n;

void caut_1(long ls,long ld,long x,long &poz)
{
long m;
if(ls>ld){
		  if(!poz)poz=-1;
		  return;
		 }
m=(ls+ld)/2;
if(x==v[m]){
			poz=m;
			caut_1(m+1,ld,x,poz);
		   }
else if(x>v[m])caut_1(m+1,ld,x,poz);
	 else caut_1(ls,m-1,x,poz);
}

void caut_2(long ls,long ld,long x,long &poz)
{
long m;
if(ls>ld)return;
m=(ls+ld)/2;
if(x>=v[m]){
		   poz=m;
		   caut_2(m+1,ld,x,poz);
		   }
else caut_2(ls,m-1,x,poz);
}

void caut_3(long ls,long ld,long x,long &poz)
{
long m;
if(ls>ld)return;
m=(ls+ld)/2;
if(x<=v[m]){
		   poz=m;
		   caut_3(ls,m-1,x,poz);
		   }
else caut_3(m+1,ld,x,poz);
}

int main()
{
long m,i,act,x,poz;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
fin>>n;
for(i=1;i<=n;i++)fin>>v[i];
fin>>m;
for(i=1;i<=m;i++){
				 poz=0;
				 fin>>act>>x;
				 if(act==0)caut_1(1,n,x,poz);
				 if(act==1)caut_2(1,n,x,poz);
				 if(act==2)caut_3(1,n,x,poz);
				 fout<<poz<<'\n';
				 }
return 0;
}