Pagini recente » Cod sursa (job #108137) | Cod sursa (job #1875370) | Cod sursa (job #1977451) | Cod sursa (job #2883920) | Cod sursa (job #2661376)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, m;
int sir[100001];
int cautare_binara(int nr) {
int st = 1;
int dr = n;
int m = (st + dr) / 2;
while (!(st == dr)) {
if (sir[m] == nr) {
return m;
} else if (st < m) {
st = m + 1;
} else {
dr = m - 1;
}
m = (st + dr) / 2;
// cout << st << " " << m << " " << dr << endl;
}
return -1;
}
int main() {
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> sir[i];
}
fin >> m;
for (int i = 1; i <= m; ++i) {
int t, x;
fin >> t >> x;
if (t == 0) {
int r = cautare_binara(x);
if (r != -1) {
int stop = 0;
while (stop == 0) {
if (sir[r + 1] == x && r + 1 <= n) {
++r;
} else {
stop = 1;
}
}
fout << r << "\n";
} else {
fout << -1 << "\n";
}
} else if (t == 1) {
int r = cautare_binara(x);
if (r == -1) {
int stop = 0;
while (stop == 0) {
if (x - 1 >= sir[1] && r == -1) {
r = cautare_binara(x-1);
} else {
stop = 1;
}
}
stop = 0;
while (stop == 0) {
if (sir[r + 1] == x && r + 1 <= n) {
++r;
} else {
stop = 1;
}
}
fout << r << "\n";
} else {
int stop = 0;
while (stop == 0) {
if (sir[r + 1] == x && r <= n) {
++r;
} else {
stop = 1;
}
}
fout << r << "\n";
}
} else {
int r = cautare_binara(x);
if (r == -1) {
int stop = 0;
while (stop == 0) {
if (x + 1 <= sir[n] && r == -1) {
r = cautare_binara(x+1);
} else {
stop = 1;
}
}
stop = 0;
while (stop == 0) {
if (sir[r - 1] == x && r - 1 >= 1) {
--r;
} else {
stop = 1;
}
}
fout << r << "\n";
} else {
int stop = 0;
while (stop == 0) {
if (sir[r - 1] == x && r >= 1) {
--r;
} else {
stop = 1;
}
}
fout << r << "\n";
}
}
}
return 0;
}
//verifica!!!!!!