Cod sursa(job #1921449)

Utilizator ButmalaiDanButmalai Dan ButmalaiDan Data 10 martie 2017 12:45:11
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<bits/stdc++.h>
using namespace std;
int n, m, a[100100], x ,y;
int main()
{
	ifstream cin("cautbin.in");
	ofstream cout("cautbin.out");
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i];
	cin >> m;
	while(m--)
	{
		int st = 1, dr = n, mid;
		cin >> x;
		if (x == 0)
		{
			cin >> x;
			while(st - dr >= 2)
			{
				mid = (dr+st)/2;
				if (a[mid] <= x) st = mid+1;
				else dr = mid;
			}
			int ans = 0;
			for (; st <= dr; st++)
			{
				if (a[st] == x) ans = st;
			}
			if (!ans)cout << "-1\n";
			else cout << ans << "\n";
		}else 
			if (x == 1)
			{
				cin >> x;
				while(st - dr >= 2)
				{
					mid = (dr+st)/2;
					if (a[mid] <= x) st = mid;
					else dr = mid;
				}
				while(a[st] <= x && st <= dr) st++; cout << st -1 << "\n";
			}else
				{
				 	cin >> x;
					while(dr - st >= 2)
					{
						mid = (dr+st)/2;
						if (a[mid] >= x) dr = mid;
						else st = mid;
					}
					while(a[dr] >= x && dr >= st) dr--; cout << dr + 1 << "\n";
				}
	}
}