Pagini recente » Cod sursa (job #2325406) | Cod sursa (job #1678585) | Cod sursa (job #1884727) | Monitorul de evaluare | Cod sursa (job #3319109)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, m, a[100001];
int cbp(int x)
{
int sol = 0, exp = 0;
while((1<<exp) <= n) exp++;
for(int i = exp; i >= 0; i--)
{
int q = sol + (1 << i);
if(q <= n && a[q] <= x) sol = q;
}
return sol;
}
int main()
{
fin >> n;
for(int i = 1; i <= n; i++)
fin >> a[i];
fin >> m;
for(int k = 1; k <= m; k++)
{
int t, x, p;
fin >> t >> x;
if(t != 2) p = cbp(x);
if(t == 1)
fout << p << '\n';
else if(t == 0)
if(a[p] == x) fout << p << '\n';
else fout << "-1\n";
else
fout << cbp(x-1) + 1 << '\n';
}
return 0;
}