Cod sursa(job #1912583)

Utilizator virtualityBbbbbbbbbbbbbbbbbb virtuality Data 8 martie 2017 09:43:53
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<bits/stdc++.h>
using namespace std;
const int N = 100020;
int n, a[N];
int caut0(int key){
	int st=1, dr=n, m;
	while(st<=dr){
		m=(st+dr)/2;
		if(a[m]<=key) st=m+1;
		else dr=m-1;
	}
	if(a[m]>key)m--;
	if(a[m]<key)m++;
	return (a[m]==key? m : -1);
}
int caut1(int key){
	int st=1, dr=n, m;
	while(st<=dr){
		m=(st+dr)/2;
		if(a[m]<=key) st=m+1;
		else dr=m-1;
	}
	if(a[m]>key) m--;
	return m;
}
int caut2(int key){
	int st=1, dr=n, m;
	while(st<=dr){
		m=(st+dr)/2;
		if(a[m]>=key) dr=m-1;
		else st=m+1;
	}
	if(a[m]<key)m++;
	return m;
}
int main(){
	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);
	scanf("%d", &n);
	int m;
	for(int i=1;i<=n;i++) scanf("%d", &a[i]);
	scanf("%d", &m);
	while(m--){
		int x, y;
		scanf("%d%d", &x, &y);
		if(x==0) printf("%d\n", caut0(y));
		if(x==1) printf("%d\n", caut1(y));
		if(x==2) printf("%d\n", caut2(y));
	}
	return 0;
}