Cod sursa(job #418552)

Utilizator joRicelAvadanei Danut joRicel Data 16 martie 2010 01:23:19
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <cstdio>
int v[100001],n;
int cb(int a[],int b);
int cb_0(int a[],int b);
int cb_1(int a[],int b);
int cb_2(int a[],int b);
void read();
int main()
{
	int s,c,aux,m;
	read();
	scanf("%d",&m);
	for(int i = 0;i < m;i++)
	{
		scanf("%d %d",&s,&c);
		if(s == 0)
		{
			aux = cb(v,c);
			printf("%d\n",cb_0(v,aux));
		}
		else if(s == 1)
		{
			aux = cb(v,c);
			printf("%d\n",cb_1(v,aux));
		}
		else if(s == 2)
		{
			aux = cb(v,c);
			printf("%d\n",cb_2(v,aux));
		}
	}
	return 0;
}
void read()
{
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	scanf("%d",&n);
	for(int i = 1;i <= n;i++)
	{
		scanf("%d",&v[i]);
	}
}
int cb(int a[],int b)
{
	int st,dr,mij;
	st = 0;dr = n;
	while(st <= dr)
	{
		mij = (st + dr) / 2;
		if(b ==  a[mij]) return mij;
		if(b > a[mij])
			st = mij + 1;
		else
			dr = mij - 1;
		if(st > dr) return -1;
	}
	return -1;
}
int cb_0(int a[],int b)
{
	while(a[b] == a[b+1])
	{
		b++;
	}
	return b;
}
int cb_1(int a[],int b)
{
	int bla = 0;
	while(a[b] == a[b+1])
	{
		b++;
		bla++;
	}
	if(bla > 0)
		return b;
	else
	{
		while(a[b] == a[b-1])
			b--;
		return b;
	}
}
int cb_2(int a[],int b)
{
	while(a[b] == a[b-1])
	{
		b--;
	}
	return b;
}