Cod sursa(job #2082353)

Utilizator DimaTCDima Trubca DimaTC Data 6 decembrie 2017 00:04:04
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<bits/stdc++.h>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);  


using namespace std;

int n,m,x;
int A[100100],y;

int bs0(int low, int high, int val) {
	int mid;
	while (low<=high) {
		mid = (low+high)/2;
		if (A[mid]<=val) low = mid+1;
		else high = mid -1;
	}
	low--;
	
	if (A[low] == val) return low;
	else return -1;
}


int bs1(int low, int high, int val) {
	int mid;
	while (low<=high) {
		mid = (low+high)/2;
		if (A[mid]<=val) low = mid+1;
		else high = mid -1;
	}
	low--;
	
	if (A[low] <=val) return low;
	else return -1;
}

int bs2(int low, int high, int val) {
	int mid;
	while (low<=high) {
		mid = (low+high)/2;
		if (A[mid]<val) low = mid+1;
		else high = mid -1;
	}
	high++;
	
	if (A[high] >=val) return high;
	else return -1;
}


int main() {
	IOS;
	ifstream cin("cautbin.in");
	ofstream cout("cautbin.out");
	cin>>n;
	
	for (int i=0; i<n; i++) cin>>A[i];
	
	cin>>m;	
	while (m--) {
		cin>>y>>x;
		switch (y) {
			case 0: {
			
				int rs = bs0(0,n-1, x);
				if (rs==-1) cout<<"-1"<<'\n';
				else cout<<rs+1<<'\n';
				break;
				}
			case 1:
				cout<<bs1(0,n-1,x)+1<<'\n';
				break;
			case 2:
				cout<<bs2(0,n-1,x)+1<<'\n';
				break;
		}
	}
	
	
	return 0;
}