Una posible implementación de lo que te piden de forma algo cutre sería la siguiente:
Código
#include <iostream> #include <vector> using namespace std; int busca(int x, vector<int>& v, int a, int b) { if (a == b) return (v[a] == x) ? a : -1; return max(busca(x, v, a, (a + b)/2), busca(x, v, (a + b)/2 + 1, b)); } int main() { int n; cin >> n; vector<int> v(n); for (int i = 0; i < n; ++i) cin >> v[i]; int x; while (cin >> x) cout << busca(x, v, 0, n - 1) << endl; }
Y son dos líneas de código la función. Sin embargo, se podría optimizar la función, para que por ejemplo si la primera llamada recursiva encuentra el elemento, no haga la segunda llamada.