Pagini recente » Cod sursa (job #2746885) | Cod sursa (job #2990007) | Cod sursa (job #231676) | Borderou de evaluare (job #1170412) | Cod sursa (job #3265931)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");
int n, m, nr, val;
int intrebare_0 (int v[], int n, int x)
{
int st = 1, dr = n;
while (st <= dr)
{
while (st <= dr)
{
int m = 1LL*(st+dr)/2;
if (v[m] == x)
{
while (v[m+1] == x)
m ++;
return m;
}
else
if (v[m] < x)
st = m+1;
else
dr = m-1;
}
}
return -1;
}
int intrebare_1 (int v[], int n, int x)
{
int st = 1, dr = n, poz;
while (st <= dr)
{
while (st <= dr)
{
int m = 1LL*(st+dr)/2;
if (v[m] <= x)
{
poz = m;
st = m+1;
}
else
dr = m-1;
}
}
return poz;
}
int intrebare_2 (int v[], int n, int x)
{
int st = 1, dr = n, poz;
while (st <= dr)
{
while (st <= dr)
{
int m = 1LL*(st+dr)/2;
if (v[m] >= x)
{
poz = m;
dr = m-1;
}
else
st = m+1;
}
}
return poz;
}
int main()
{
f >> n; int a[n+1];
for (int i = 1; i <= n; i ++)
f >> a[i];
f >> m;
for (int i = 1; i <= m; i ++)
{
f >> nr >> val;
if (nr == 0)
g << intrebare_0(a, n, val) << '\n';
else
if (nr == 1)
g << intrebare_1(a, n, val) << '\n';
else
g << intrebare_2(a, n, val) << '\n';
}
return 0;
}