Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #434574) | Cod sursa (job #2826751) | Cod sursa (job #2011452)
#include <cstdio>
using namespace std;
int v[100010],y;
int s1 (int a, int b)
{
int m;
while (a <= b)
{
m = (a + b) / 2;
if (v[m] <= y)
a = m + 1;
else
b = m - 1;
}
m = (a + b) / 2;
if (v[m] > y) m --;
if (v[m] == y)
return m;
return -1;
}
int s2 (int a, int b)
{
int m, n = b;
while (a < b)
{
m = (a + b) / 2;
if (v[m] <= y)
a = m + 1;
else
b = m;
}
m = (a + b) / 2;
if (v[m] > y)
-- m;
return m;
}
int s3 (int a, int b)
{
int m;
while (a < b)
{
m = (a + b) / 2;
if (v[m] < y)
a = m + 1;
else
b = m;
}
m = (a + b) / 2;
if (v[m] < y)
++ m;
return m;
}
//ifstream cin("cautbin.in");
//ofstream cout("cautbin.out");
int main ()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int i, n, m,x;
scanf("%d",&n);
for (i = 1; i <= n; ++ i)
scanf("%d",&v[i]);
scanf("%d",&m);
for(i=1; i<=m; i++)
{
scanf("%d%d",&x,&y);
if (x == 0)
printf("%d\n",s1(1,n));
if (x == 1)
printf("%d\n",s2(1,n));
if (x == 2)
printf("%d\n",s3(1,n));
}
return 0;
}