Cod sursa(job #1166957)

Utilizator smallOneAdina Mateescu smallOne Data 4 aprilie 2014 00:01:50
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
/*
ID: adinama1
PROG: test
LANG: C++
*/

#include <cstdio>
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <ctype.h>
#include <cstring>
#include <string>
#include <ctime>
#include <cassert>
#include <utility>

using namespace std;

#define LIM 100005

int v[LIM];

int main() {
	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out","w", stdout);

	int n, m, op, num;

	scanf("%d ", &n);
    for(int i = 0; i < n; ++i) {
        scanf("%d ", &v[i]);
    }
	scanf("%d ", &m);
	for(int i = 0; i < m; ++i) {
        scanf("%d %d", &op, &num);
        switch(op) {
            case 0: if(binary_search(v, v + n, num)) {
                        printf("%d\n", upper_bound(v, v + n, num) - v); // cea mai mare poz pe care se afla un element = num
                    } else
                        printf("-1\n");
                break;
            case 1: printf("%d\n", lower_bound(v, v + n, num + 1) - v); // cea mai mare poz pe care se afla un element <= num
                break;
            default: printf("%d\n", upper_bound(v, v + n, num - 1) - v + 1); // cea mai mica poz pe care se afla un element >= num
        }
	}
    return 0;
}