Cod sursa(job #443565)

Utilizator sebe14Moraru Sebastian sebe14 Data 17 aprilie 2010 16:21:12
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100001];
int main()
{
	int n,i,j,x,mij,cod,ok,m;
	f>>n;
	for(i=1; i<=n; i++)
		f>>v[i];
	f>>m;
	while(m--){
		f>>cod>>x;
		i=1;
		j=n;
		ok=0;
		while(!ok && i<=j){
			mij=(i+j)/2;
			if(v[mij]==x)
				ok=1;
			else
				if(x>v[mij])
					i=mij+1;
				else
					j=mij-1;
		}
		switch(cod){
		case 0: if(ok){
			j=mij;
			while(v[j+1]==x && j<n)
				j++;
			g<<j<<"\n";
			}
			else
				g<<"-1\n";
			break;
		case 1: if(ok){
			j=mij;
			while(v[j+1]==x && j<n)
				j++;
			g<<j<<"\n";
			}
			else{
				if(v[mij]>x)
					mij--;
				g<<mij<<"\n";
			}
			break;
			
		case 2: if(ok){
			i=mij;
			while(v[i-1]==x && i>1)
				i--;
			g<<i<<"\n";
			}
			else{
				if(v[mij]<x)
					mij++;
				g<<mij<<"\n";
			}
		}
	}
	return 0;
}