Cod sursa(job #840804)

Utilizator NohaiClaudiuNohai Claudiu NohaiClaudiu Data 23 decembrie 2012 12:00:20
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int n, m, poz, x, a, da, p, u, mij;
int v[100001];

int main(){
	f>>n;
	for (int i=1;i<=n;++i) f>>v[i];
	f>>m;
	for (int i=1;i<=m;++i){
		f>>a>>x;
		p=1; u=n;
		da=0;
		while (p<=u && da==0){
			mij=(p+u)/2;
			if (v[mij]==x) da=1;
			else
				if (v[mij]<x) u=mij-1;
				else p=mij+1;
		}
		poz=mij;
		switch (a){
		case 0: if (!da) g<<"-1\n";
				else {
					while (poz+1<=n && v[poz+1]==x) poz++; 
					g<<poz<<'\n';
				}
				break;
		case 1: if (!da)
					if (v[mij]>x) g<<mij-1<<'\n';
					else g<<mij<<'\n';
				else {
					while (poz+1<=n && v[poz+1]==x) poz++; 
					g<<poz<<'\n';
				} 
				break;
		case 2: if (!da)
					if (v[mij]<x) g<<mij+1<<'\n';
					else g<<mij<<'\n';
				else {
					while (poz-1>=1 && v[poz-1]==x) poz--; 
					g<<poz<<'\n';
				} 
				break;
		}
	}
	g.close();
	return 0;
}