Pagini recente » Cod sursa (job #81120) | Cod sursa (job #1902293) | Cod sursa (job #1264188) | Cod sursa (job #1713355) | Cod sursa (job #997988)
Cod sursa(job #997988)
#include <stdio.h>
#define NMax 100005
int n, v[NMax];
int cbin0(int val)
{
if (v[n-1] == val)
return val;
int lo = 0, hi = n-1, mi;
while (hi - lo > 1)
{
mi = lo + (hi - lo) / 2;
if (v[mi] > val)
hi = mi;
else
lo = mi;
}
if (v[lo] == mi)
return lo;
return -1;
}
int cbin1(int val)
{
int lo = 0, hi = n-1, mi;
while (hi - lo > 1)
{
mi = lo + (hi - lo) / 2;
if (v[mi] > val)
hi = mi;
else
lo = mi;
}
if (v[hi] <= mi)
return hi;
return lo;
}
int cbin2(int val)
{
int lo = 0, hi = n-1, mi;
while (hi - lo > 1)
{
mi = lo + (hi - lo) / 2;
if (v[mi] < val)
lo = mi;
else
hi = mi;
}
if (v[lo] >= val)
return lo;
return hi;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &v[i]);
int t;
scanf("%d", &t);
while (t--)
{
int op, val;
scanf("%d %d", &op, &val);
if (op == 0)
printf("%d\n", cbin0(val) + 1);
if (op == 1)
printf("%d\n", cbin1(val) + 1);
if (op == 2)
printf("%d\n", cbin2(val) + 1);
}
return 0;
}