Pagini recente » Cod sursa (job #1200871) | Cod sursa (job #1017643) | Cod sursa (job #630660) | Cod sursa (job #855867) | Cod sursa (job #1504204)
#include <stdio.h>
#include <algorithm>
#define MAX 100003
using namespace std;
int a[MAX], n;
void read()
{
int i;
scanf("%d", &n);
for(i = 1; i <= n; i++)
scanf("%d", &a[i]);
}
int bin_0(int x)
{
int i, step;
for(step = 1; step < n; step <<= 1);
for(i = 0; step; step >>= 1)
if(i + step <= n && a[i + step] <= x)
i += step;
if(a[i] == x)
return i;
else
return -1;
}
int bin_1(int x)
{
int i, step;
for(step = 1; step < n; step <<= 1);
for(i = 0; step; step >>= 1)
if(i + step <= n && a[i + step] <= x)
i += step;
return i;
}
int bin_2(int x)
{
int i, step, pos;
for(step = 1; step < n; step <<= 1);
for(i = 0; step; step >>= 1)
if(i + step <= n)
{
if(a[i + step] >= x)
pos = i + step;
else
if(a[i + step] < x)
i += step;
}
return pos;
}
void solve()
{
int i, m, sw, r, x;
scanf("%d", &m);
for(i = 1; i <= m; i++)
{
scanf("%d", &sw);
if(sw == 0)
{
scanf("%d", &x);
r = bin_0(x);
printf("%d\n", r);
}
else
if(sw == 1)
{
scanf("%d", &x);
r = bin_1(x);
printf("%d\n",r);
}
else
{
scanf("%d",&x);
r = bin_2(x);
printf("%d\n", r);
}
}
}
int main()
{
freopen("cautbin.in","r", stdin);
freopen("cautbin.out","w",stdout);
read();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}