Pagini recente » Cod sursa (job #2929993) | Cod sursa (job #2196216) | Cod sursa (job #1006117) | Cod sursa (job #140600) | Cod sursa (job #2792248)
#include <fstream>
using namespace std;
int v[100000];
int binsearch (int s, int e) {
int l = 0, r = s - 1, a = (l + r) / 2;
while (l <= r) {
if (e < v[a]) {
r = a - 1;
a = (l + r) / 2;
continue;
}
if (e > v[a]) {
l = a + 1;
a = (l + r) / 2;
continue;
}
return a;
}
return -1;
}
int binsearch1 (int s, int e) {
int l = 0, r = s - 1, a = (l + r) / 2;
while (l <= r) {
if (e < v[a]) {
r = a - 1;
a = (l + r) / 2;
continue;
}
if (e > v[a]) {
l = a + 1;
a = (l + r) / 2;
continue;
}
return a;
}
return -1;
}
int main () {
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int n, m, x;
short nr;
in >> n;
for (int i = 0; i < n; ++i)
in >> v[i];
in >> m;
for (int j = 0; j < m; ++j) {
in >> nr;
in >> x;
int aux;
switch (nr) {
case 0:
aux = binsearch(n, x);
if (aux == -1) {
out << aux << '\n';
break;
}
for (int i = aux + 1; v[i] == v[aux] && i <= n; ++i)
aux++;
out << aux + 1 << '\n';
break;
case 1:
aux = binsearch1(n, x);
if (v[aux] != x) {
out << aux << '\n';
break;
}
for (int i = aux + 1; v[i] == v[aux] && i <= n; ++i)
aux++;
out << aux + 1 << '\n';
break;
case 2:
aux = binsearch1(n, x);
if (v[aux] != x) {
out << aux + 2 << '\n';
break;
}
for (int i = aux - 1; v[i] == v[aux] && i >= 0; --i)
aux--;
out << aux + 1 << '\n';
break;
}
}
//https://infoarena.ro/problema/cautbin
//https://infoarena.ro/problema/algsort
//
return 0;
}