Cod sursa(job #2704468)

Utilizator AlexZeuVasile Alexandru AlexZeu Data 10 februarie 2021 17:27:31
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
using namespace std;

int v[100001];
int fr[100001], n;

int cauta (int y) {
	int stanga = 1, dreapta = n, m;
	while(stanga < dreapta) {
		m = (stanga + dreapta) / 2;
		if (v[m] < y)
			stanga = m + 1;
		else
			dreapta = m;
	}
	if (v[stanga] == y) {
		while (v[stanga] == y) {
			++stanga;
		}
		return stanga - 1;
	}
    return - 1;
}

int main() {
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		cin >> v[i];
		++fr[v[i]];
	}
	int m;
	cin >> m;
	for (int i = 1; i <= m; ++i) {
		int x, y;
		cin >> x >> y;
		if (x == 0) {
			cout << cauta(y);
		}
		else if (x == 1) {
			while (fr[y] == 0) {
				--y;
			}
			cout << cauta(y);
		}
		else if (x == 2) {
			while (fr[y] == 0) {
				++y;
			}
			int c = cauta(y);
			if (c != -1) {
                while (v[c] == y) {
                    --c;
                }
			}
			cout << c + 1;
		}
	}
	return 0;
}