Cod sursa(job #1018330)

Utilizator stanescu.raduRadu Stanescu stanescu.radu Data 29 octombrie 2013 13:09:54
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include<fstream>

using namespace std;
ifstream f ("cautbin.in");
ofstream g("cautbin.out");

int n,t,x,v[1000],y,i,m;

int cautare0 (int x, int st, int dr)
{
	int i=st,j=dr;
	if (i>j) return -1;
	int m=(i+j)/2;
	if (x==m) return m;
	if (x>v[m]) return cautare0(x,m,j);
	else return cautare0(x,i,m);
}

int cautare1 (int x,int st, int dr)
{
	int i=st,j=dr;
	if (i>j) return j;
	int m=(i+j)/2;
	if (x==m) return m;
	if (x>v[m]) return cautare1(x,m+1,j);
	else return cautare1(x,i,m-1);
}

int cautare2 (int x,int st, int dr)
{
	int i=st,j=dr;
	if (i>j) return i;
	int m=(i+j)/2;
	if (x==m) return m;
	if (x>v[m]) return cautare2(x,m+1,j);
	else return cautare2(x,i,m-1);
}

int main ()
{
	f>>n;
	for (i=1;i<=n;i++)
		f>>v[i];
	f>>m;
	for (i=1;i<=m;i++)
	{
		f>>t>>x;
		if (t==0) y=cautare0(x,1,n);
		if (t==1) y=cautare1(x,1,n);
		if (t==2) y=cautare2(x,1,n);
		if (y!=-1) 
		{
			if (t==0) {while (v[y]==x && v[y]==v[y+1]) y++; g<<y<<"\n";}
			if (t==2) {while (v[y]<=x && v[y]==v[y-1]) y--; g<<y<<"\n";}
			if (t==1) {while (v[y]>=x && v[y]==v[y+1]) y++; g<<y<<"\n";}
		}
		if (t==0 && y==-1) g<<y<<"\n";
	}
	f.close();
	g.close();
	return 0;
}