Cod sursa(job #391378)

Utilizator ghedany92Gheorghita Daniel ghedany92 Data 5 februarie 2010 16:21:06
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream.h>
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
long kappa,a[100005],n,m,i,dr,st,c,x,poz;
int cautare(long x)
{
	st=1;dr=n;
	while (st<=dr)
	{
		if (x==a[dr]) return dr;
		if (x==a[st]) return st;
		if (x==a[(st+dr)/2]) return (st+dr)/2;
		if (x<a[(st+dr)/2]) dr=(st+dr)/2;
		if (x>a[(st+dr)/2]) st=(st+dr)/2;
	}
return -1;
}		
		
int main()
{fin>>n;
for (i=1;i<=n;i++)
	fin>>a[i];
fin>>m;
for (kappa=1;kappa<=m;kappa++)
{
	fin>>c>>x;
	if (c==0)
	{poz=cautare(x);
	if (poz!=-1)
		while (a[poz]==x) poz++;
	if (poz!=-1) 
		poz--;
	fout<<poz<<'\n';
	}
	if (c==2)
	{poz=cautare(x);
	while(a[poz]==x) poz--;
	if (poz>0) {poz++; fout<<poz<<'\n';}
	if (poz==-1)
		{	poz=1;
			while (a[poz]<x) poz++;
			poz--;
			fout<<poz<<'\n';
		}
	}
	if (c==1)
	{poz=cautare(x);
	while (a[poz]==x) poz++;
	if (poz>0) {poz--; fout<<poz<<'\n';}
	if (poz==-1)
		{poz=1;
		while (a[poz]<x) poz++;
		fout<<poz<<'\n';
		}
	}
}
fout.close();
return 0;
}