Cod sursa(job #663043)

Utilizator JohannesJohannes Dragulanescu Johannes Data 17 ianuarie 2012 19:06:33
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <cstdio>
#include <vector>

using namespace std;

#define file_in "cautbin.in"
#define file_out "cautbin.out"

int n,m;
int v[101000];

int cautare(int x){
	
	int i,step;
	for (step=1;step<n;step<<=1);
	for (i=0;step;step>>=1)
		 if (i+step<=n && v[i+step]<=x)
			 i+=step;
	return i;
}	

int main(){
	int i,tip,x;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d", &n);
	for (i=1;i<=n;++i)
		scanf("%d", &v[i]);
		
	scanf("%d", &m);
	
	while(m--)
	{
		
		scanf("%d %d", &tip,&x);
		if (tip==0){
			int p=cautare(x);
			if (v[p]==x)
				printf("%d\n", p);
			else
				printf("-1\n");
		}
		
		if (tip==1){
			int p=cautare(x);
			printf("%d\n", p);
		}
		
		if (tip==2){
			int p=cautare(x-1);
			printf("%d\n", p+1);
		}
	}
	
	return 0;
}