Pagini recente » Cod sursa (job #2943626) | Cod sursa (job #2507801) | Cod sursa (job #1851786) | Cod sursa (job #1516671) | Cod sursa (job #2661399)
#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;
}
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;
}