Cod sursa(job #1456768)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 1 iulie 2015 21:01:27
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>
#define MAX 100005
using namespace std;

void f0(int x);
void f1(int x);
void f2(int x);

int n, m, v[MAX], i, x, nr;

int main(){
	freopen("cautabin.in", "r", stdin);
	freopen("cautabin.out", "w", stdout);
	scanf("%d", &n);
	for(i = 0; i < n; i++)
		scanf("%d", &v[i]);

	scanf("%d", &m);
	for(i = 0; i < m; i++){
		scanf("%d%d", &nr, &x);

		switch(nr){
			case 0: f0(x); break;
			case 1: f1(x); break;
			default: f2(x);
		}
	}
	return 0;
}

void f0(int x){
	int* p = upper_bound(v, v + n, x);
	if(p == v || *(p - 1) != x)
		printf("-1\n");
	else
		printf("%ld\n", p - v);
}

void f1(int x){
  int* p = upper_bound(v, v + n, x);
	printf("%ld\n", p - v);
}

void f2(int x){
  int* p = lower_bound(v, v + n, x);
  printf("%ld\n", p - v + 1);
}