Cod sursa(job #345323)

Utilizator AstronothingIulia Comsa Astronothing Data 2 septembrie 2009 16:12:04
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>

using namespace std;

int main()
{
	ifstream f("cautbin.in");
	ofstream f2("cautbin.out");
	int n,v[100002];
	f>>n;
	for(int i=0;i<n;++i) f>>v[i];

	int m,x,y;
	f>>m;
	while(f>>x>>y)
	{
		int st = 0, dr = n-1;
		int mid;
		while(st<=dr)
		{
			mid = st + (dr-st)/2;
			if(v[mid]<y) st = mid+1;
			else if(v[mid]>y) dr = mid-1;
			else break;
		}
		mid = v[mid]==y ? mid : st;

		switch(x)
		{
			case 0:
			{
				if(v[mid]!=y) f2<<"-1\n";
				else 
				{
					while(mid<n && v[mid++]==y);
					f2<<(mid-2)+1<<"\n";
				}
				break;
			}
			case 1:
			{
				if(v[mid]!=y) ++mid;
				else while(mid<n && v[mid++]==y);
				f2<<(mid-2)+1<<"\n";
				break;
			}
			case 2:
			{
				while(mid>0 && v[mid--]==y);
				f2<<(++mid)+1<<"\n";
			}
		}
	}
	return 0;
}