Pagini recente » Cod sursa (job #2447107) | Cod sursa (job #2157338) | Cod sursa (job #2536977) | Cod sursa (job #2599623) | Cod sursa (job #673523)
Cod sursa(job #673523)
#include <stdio.h>
int a[100001];
int max_pos(int value, int i1, int i2)
{
if (i1 == i2)
return (a[i1] == value) ? i1 : -1;
int m = (i1 + i2) / 2;
if (value >= a[m + 1])
return max_pos(value, m + 1, i2);
return max_pos(value, i1, m);
}
int max_pos_min_value(int value, int i1, int i2)
{
if (i1 == i2)
return (a[i1] == value) ? i1 : -1;
int m = (i1 + i2) / 2;
if (a[m] < value && value < a[m + 1])
return m;
if (value >= a[m + 1])
return max_pos_min_value(value, m + 1, i2);
return max_pos_min_value(value, i1, m);
}
int min_pos_max_value(int value, int i1, int i2)
{
if (i1 == i2)
return (a[i1] == value) ? i1 : -1;
int m = (i1 + i2) / 2;
if (a[m] < value && value < a[m + 1])
return m + 1;
if (a[m] >= value)
return min_pos_max_value(value, i1, m);
return min_pos_max_value(value, m + 1, i2);
}
int main()
{
int n, m;
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d\n", &n);
for (int i = 0; i < n; i++)
scanf("%d ", &a[i]);
scanf("%d\n", &m);
for (int i = 0; i < m; i++) {
int code, x;
scanf("%d %d\n", &code, &x);
switch (code) {
case 0:
printf("%d\n", 1 + max_pos(x, 0, n - 1));
break;
case 1:
printf("%d\n", 1 + max_pos_min_value(x, 0, n - 1));
break;
case 2:
printf("%d\n", 1 + min_pos_max_value(x, 0, n - 1));
break;
}
}
return 0;
}