Cod sursa(job #680819)

Utilizator gabrielvGabriel Vanca gabrielv Data 15 februarie 2012 22:46:00
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
using namespace std;
//#include<cstdlib>
#include<stdio.h>
int v[1005];
int caut0(int val,int dr)
{
	int st=1,m,p=0;
	while(st<=dr)
	{
		m=(st+dr)/2;
		if(v[m]==val)
		{	
			if(p<m)
				p=m;
			st=m+1;
		}
		else
			if(val<v[m])
				dr=m-1;
			else
				st=m+1;
	}
	if(p)
		return p;
	else
		return -1;
}
int caut1(int val,int dr)
{
	int st=1,m,p=0;
	while(st<=dr)
	{
		m=(st+dr)/2;
		if(v[m]==val)
		{	
			while(v[m]==val)
				m++;
			return --m;
		}
		else
			if(val<v[m])
				dr=m-1;
			else
				st=m+1;
	}
}
int caut2(int val,int dr)
{
	int st=1,m,p=0;
	while(st<=dr)
	{
		m=(st+dr)/2;
		if(v[m]==val)
		{	
			while(v[m]==val)
				m--;
			return ++m;
		}
		else
			if(val<v[m])
				dr=m-1;
			else
				st=m+1;
	}
}

int main()
{
	int i,q,n,m,val;
	freopen("cautbin.in","r", stdin);
	freopen("cautbin.out","w", stdout);
	scanf("%d", &n);
	for(i=1;i<=n;i++)
		scanf("%d", &v[i]);
	scanf("%d", &m);
	for(;m!=0;m--)
	{
		scanf("%d %d", &q, &val);
		if(q==0) 
			printf("%d\n", caut0(val,n));
		else
			if(q==1) 
				printf("%d\n", caut1(val,n));
			else
				printf("%d\n", caut2(val,n));
	}
	return 0;
}