Pagini recente » Cod sursa (job #1892070) | Cod sursa (job #3212150) | Cod sursa (job #294202) | Cod sursa (job #660420) | Cod sursa (job #1450305)
#include <stdio.h>
using namespace std;
int N, a[100000];
void read()
{
scanf("%d", &N);
for (int i = 0; i < N; ++i)
scanf("%d", &a[i]);
}
int binara1(int x)
{
int st = 0;
int dr = N-1;
while (dr - st > 0)
{
int mij = (st + dr) / 2;
if (a[mij] == x)
return mij + 1;
if (x >= a[mij])
st = mij+1;
else
dr = mij-1;
}
if (a[dr] == x)
return dr + 1;
else
return -1;
}
int binara2(int x)
{
int st = 0;
int dr = N-1;
while (dr - st > 0)
{
int mij = (st + dr) / 2;
if (x >= a[mij])
st = mij+1;
else
dr = mij-1;
}
if (a[dr] > x)
dr --;
return dr + 1;
}
int binara3(int x)
{
int st = 0;
int dr = N-1;
while (dr - st > 0)
{
int mij = (st + dr) / 2;
if (x <= a[mij])
dr = mij-1;
else
st = mij+1;
}
if (a[st] < x)
st++;
return st + 1;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("coutbin.out", "w", stdout);
read();
int k;
scanf("%d", &k);
for (int o = 0; o < k; ++o)
{
int instr, val;
scanf("%d%d", &instr, &val);
if (instr == 0)
printf("%d\n", binara1(val));
else if (instr == 1)
printf("%d\n", binara1(val));
else
printf("%d\n", binara1(val));
}
return 0;
}