Cod sursa(job #880028)

Utilizator BogdanMacoMacovei Bogdan BogdanMaco Data 16 februarie 2013 10:32:36
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int main(){
	int a,b,o,w,m,n,i,flg,h[100001],x,y,z;
	f>>n>>m;
	for(i=1;i<=n;i++)
	f>>h[i];
	for(i=1;i<=m;i++){
		f>>o>>w;
		x=-1; y=-1; z=1+n;
		if(o%3==0){
			a=1;b=n;
			flg=(a+b)/2;
			while(a<b || a==b){
				if(h[flg]==w){
					if(flg>x)x=flg;
					a=flg+1;}
				else{
					if(h[flg]<w)a=flg+1;
					else b=flg-1;}
				flg=(a+b)/2;}
		g<<x<<'\n';
		}
	else{
		if(o%3==1){
			a=1; b=n;
			flg=(a+b)/2;
			while(a<b || a==b) {
				if(h[flg]<=w) { if(flg>y)y=flg; a=flg+1;}                       
				else {if(h[flg]<w)a=flg+1;else b=flg-1;
				}
				flg=(a+b)/2;}
			g<<y<<'\n';}
		else{
			a=1; b=n;
			flg=(a+b)/2;
			while(a<=b){
				if(h[flg]>=w){if(flg<z)z=flg;b=flg-1;}
				else a=flg+1;
				flg=(a+b)/2;
			}
			g<<z<<'\n';}
	}
	}
	f.close();
	g.close();
	return 0;
}