Cod sursa(job #846378)

Utilizator test_13testing test_13 Data 1 ianuarie 2013 23:28:02
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
#define Max 100001

int n,a[Max];

int cb(int val)
{
	int lf=1,rt=n,md;
	while(rt-lf>1)
	{
		md=(lf+rt)/2;
		if(a[md]>val)rt=md-1; else lf=md;
	}
	return a[rt]==val?rt:a[lf]==val?lf:-1;
}

int cb1(int val)
{
	int lf=1,rt=n,md;
	while(rt-lf>1)
	{
		md=(lf+rt)/2;
		if(a[md]>val)rt=md-1; else lf=md;
	}
	return a[rt]<=val?rt:lf;
}

int cb2(int val)
{
	int lf=1,rt=n,md;
	while(rt-lf>1)
	{
		md=(lf+rt)/2;
		if(a[md]<val)lf=md+1; else rt=md;
	}
	return a[lf]>=val?lf:rt;

}

int main()
{
	int m,op,x;
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
		scanf("%d",&n);
		for(int i=1;i<=n;i++)scanf("%d",&a[i]);
		scanf("%d",&m);
		for(int i=1;i<=m;i++)
		{
			scanf("%d %d",&op,&x);
			switch(op)
			{
				case 0: printf("%d\n",cb(x)); break;
				case 1: printf("%d\n",cb1(x)); break;
				case 2: printf("%d\n",cb2(x)); break;
			}
		}
	return 0;
}