Cod sursa(job #201966)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 5 august 2008 13:09:21
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <stdio.h>
#define N 100001
int v[N],n,m,a,orig;
int cautbin12(int x){
	int st=1,dr=n,m;
	while(st<dr){
		m=(st+dr)>>1;
		if(v[m]<x) st=m+1;
		else dr=m;
	}
	if(a==1)
		return st-1;
	else return st;
}
int cautbin0(int x){
	int st=1,dr=n,m;
	while(st<dr){
		m=(st+dr)>>1;
		if(v[m]<=x) st=m+1;
		else dr=m;
	}
	if(v[st-1]!=x) return -1;
	return st-1;
}
int main(){
	int i,x;
	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(i=1;i<=m;i++){
		scanf("%d%d",&a,&x);
		orig=x;
		if(a==1|| a==2) printf("%d\n",cautbin12(x));
		else printf("%d\n",cautbin0(x));
	}
	return 0;
}