Cod sursa(job #419392)

Utilizator KosmynC64Munteanu Cosmin KosmynC64 Data 17 martie 2010 13:49:00
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
int comp(const void*a,const void*b){
return (*(int*)a-*(int*)b);}
int b_search(int a,int b,int c,int v[]){
	int m=(a+b)/2;
	if(c==v[m])return m;
	if(c<v[m])return b_search(a,m-1,c,v);
	if(c>v[m])return b_search(m+1,b,c,v);}
int main(){
	int n,v[100000],m,t,c,pos;
	ifstream f("cautbin.in");
	ofstream g("cautbin.out");
	f>>n;
	for(int i=0;i<n;i++)f>>v[i];
	qsort(v,n,sizeof(int),comp);
	f>>m;
	for(int i=0;i<m;i++){
		f>>t>>c;
		pos=b_search(0,n-1,c,v);
		if(t==0){if(v[pos]!=c)g<<"-1"<<endl;
		else while(v[pos+1]==v[pos])pos++;}
		if(t==1)while(v[pos+1]==v[pos])pos++;
		if(t==2)while(v[pos-1]==v[pos])pos--;
		g<<pos+1<<endl;
	}
	f.close();g.close();
return 0;}