Pagini recente » Cod sursa (job #3239175) | Cod sursa (job #296257) | Cod sursa (job #1170007) | Cod sursa (job #245331) | Cod sursa (job #643544)
Cod sursa(job #643544)
#include <stdio.h>
#define NMAX 100010
int a[NMAX];
int n, m;
int binarySearch1(int x)
{
int left = 1, right = n, m, store = -1;
while(left <= right)
{
m = (left + right) / 2;
if (x == a[m])
store = m;
if (x >= a[m])
left = m+1;
else
right = m-1;
}
return store;
}
int binarySearch2(int x)
{
int left = 1, right = n, m, store = -1;
while(left <= right)
{
m = (left + right) / 2;
if (x >= a[m])
store = m;
if (x >= a[m])
left = m+1;
else
right = m-1;
}
return store;
}
int binarySearch3(int x)
{
int left = 1, right = n, m, store = -1;
while(left <= right)
{
m = (left + right) / 2;
if (x <= a[m])
store = m;
if (x <= a[m])
right = m-1;
else
left = m+1;
}
return store;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
scanf("%d", &m);
for (int i = 1, x, y; i <= m; i++)
{
scanf("%d %d", &x, &y);
if (x == 0)
{
printf("%d\n", binarySearch1(y));
}
else if (x == 1)
{
printf("%d\n", binarySearch2(y));
}
else
{
printf("%d\n", binarySearch3(y));
}
}
return 0;
}