Pagini recente » Cod sursa (job #1260646) | Cod sursa (job #47981) | jc2020-runda2 | Clasament tot-oni-2012-ziua1-11-12 | Cod sursa (job #2704471)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
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() {
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
++fr[v[i]];
}
int m;
fin >> m;
for (int i = 1; i <= m; ++i) {
int x, y;
fin >> x >> y;
if (x == 0) {
fout << cauta(y);
}
else if (x == 1) {
while (fr[y] == 0) {
--y;
}
fout << cauta(y);
}
else if (x == 2) {
while (fr[y] == 0) {
++y;
}
int c = cauta(y);
if (c != -1) {
while (v[c] == y) {
--c;
}
fout << c + 1;
}
else
fout << "-1";
}
}
return 0;
}