Cod sursa(job #1967239)

Utilizator DimaTCDima Trubca DimaTC Data 16 aprilie 2017 11:58:25
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<fstream>

using namespace std;

int n,x,y,z,m,a[100100];

ifstream cin("cautbin.in");
ofstream cout("cautbin.out");

int binarSearch(int a[], int n, int v) {
	int low=0;
	int high=n-1;
	int mid;
	
	while (low<=high) {
	
    mid=(low+high)/2;
    if (a[mid]==v) return mid;
    else if (a[mid]>v) high=mid-1;
    else if (a[mid]<v) low=mid+1;
	}
	
	return mid;
    }
    
int main(){
	
	cin>>n;
	for (int i=0; i<n; i++) 
	   cin>>a[i];
	   
	cin>>m;
    
	for (int i=0; i<m; i++) {
		cin>>x>>y;
		if (x==0) {
			z=binarSearch(a,n,y);
			if (a[z]==y) {
			
			if (z>=0) { 
				while (z<n-1 && a[z]==a[z+1]) z++;
			}
			cout<<z+1<<endl;}
			else cout<<"-1"<<endl;
		}
		else if (x==1) {
			z=binarSearch(a,n,y);
			if (a[z]==y) { 
				while (z<n-1 && a[z]==a[z+1]) z++;
			}
			else if (a[z]>y) {
				while (z>0 && a[z]>y) z--;
			}
			cout<<z+1<<endl;
		}
		else if (x==2) {
			z=binarSearch(a,n,y);
			if (a[z]==y) {
				while (z>1 && a[z]==a[z-1]) z--;
			}
			else if (a[z]<y) {
				while (z<n-1 && a[z]<y) z++;
			}
			cout<<z+1<<endl;
		}
	}   
	
	return 0;
}