Cod sursa(job #745237)

Utilizator FlameingoAiordachioaei Marius Flameingo Data 10 mai 2012 20:10:24
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<cstdio>
#define DMAX 100001
using namespace std;
int n,v[DMAX],b;
int cautare1(int a)
{
	int s=0,aux=b;
	for(;aux;aux>>=1)
		if(v[s+aux]<=a&&s+aux<=n)
			s+=aux;
	return s;
}
int cautare2(int a)
{
	int s=0,aux=b;
	for(;aux;aux>>=1)
		if(v[s+aux]<a&&s+aux<=n)
			s+=aux;
	return s;
}
void citire()
{
	freopen("cautbin.in","r",stdin);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&v[i]);
	for(b=1;b<n;b<<=1);
}
void rezolvare()
{
	freopen("cautbin.out","w",stdout);
	int m,x,y,aux;
	for(scanf("%d",&m);m;--m)
	{
		scanf("%d%d",&x,&y);
		if(!x)
		{
			aux=cautare1(y);
			if(v[aux]==y)
				printf("%d",aux);
			else
				printf("-1");
		}
		else
			if(x==1)
				printf("%d",cautare1(y));
			else
				printf("%d",cautare2(y)+1);
		printf("\n");
	}
}
int main()
{
	citire();
	rezolvare();
}