Pagini recente » Cod sursa (job #1266961) | Cod sursa (job #1870011) | Cod sursa (job #2865214)
#include <iostream>
#include <fstream>
using namespace std;
const string filename = "cautbin";
ifstream fin(filename + ".in");
ofstream fout(filename + ".out");
int pow2, n, q, v[100005];
int cautbin0(int x)
{
int sol = 0;
for(int i = pow2; i > 0; i >>= 1)
if(sol + i <= n && v[sol + i] <= x)
sol += i;
if(v[sol] == x)
return sol;
else
return -1;
}
int cautbin1(int x)
{
int sol = 0;
for(int i = pow2; i > 0; i >>= 1)
if(sol + i <= n && v[sol + i] <= x)
sol += i;
return sol;
}
int cautbin2(int x)
{
int sol = 0;
for(int i = pow2; i > 0; i >>= 1)
if(sol + i <= n && v[sol + i] < x)
sol += i;
return sol + 1;
}
int main()
{
fin >> n;
for(int i = 1; i <= n; i++)
fin >> v[i];
pow2 = 1;
while(pow2 * 2 <= n)
pow2 *= 2;
fin >> q;
for(int i = 1; i <= q; i++)
{
int cerinta, val;
fin >> cerinta >> val;
if(cerinta == 0)
fout << cautbin0(val);
if(cerinta == 1)
fout << cautbin1(val);
if(cerinta == 2)
fout << cautbin2(val);
fout << '\n';
}
return 0;
}