Cod sursa(job #617505)

Utilizator Cristina94Cristina Ungurean Cristina94 Data 14 octombrie 2011 22:54:56
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<stdio.h>
int n, m, x[100000];
int cauta0(int b)
{	
	int ps, pi, mij, poz=-1;
	ps=1; pi=n;
	while(ps<=pi)
	{
		mij=(ps+pi)/2;
		if(b<x[mij])
			pi=mij-1;
		if(b>x[mij])
			ps=mij+1;
		if(b==x[mij])
			poz=mij, ps=n+1;
	}
	while(x[poz+1]==b&&poz<=n)
		poz++;
	return poz;
}
int cauta1(int b)
{
	int ps, pi, mij, poz;
	ps=1; pi=n;
	while(ps<=pi)
	{
		mij=(ps+pi)/2;
		if(b<=x[mij])
			pi=mij-1, poz=mij;
		if(b>=x[mij])
			ps=mij+1, poz=mij;
	}
	while(x[poz+1]<=b&&poz<=n)
		poz++;
	return poz;
}
int cauta2(int b)
{
	int ps, pi, mij, poz;
	ps=1; pi=n;
	while(ps<=pi)
	{
		mij=(ps+pi)/2;
		if(b<=x[mij])
			pi=mij-1, poz=mij;
		if(b>=x[mij])
			ps=mij+1, poz=mij;
	}
	while(x[poz-1]==b&&poz<=n)
		poz--;
	return poz;
}
	
int main()
{
	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);
	scanf("%d", &n);
	int i, a, b;
	
	for(i=1;i<=n;i++)
		scanf("%d", &x[i]);
	scanf("%d", &m);
	
	for(i=1;i<=m;i++)
	{
		scanf("%d %d", &a, &b);
		if(a==0)
			printf("%d\n", cauta0(b));
		if(a==1)
			printf("%d\n", cauta1(b));
		if(a==2)
			printf("%d\n", cauta2(b));
	}
	return 0;
}