Pagini recente » Cod sursa (job #517415) | Cod sursa (job #34634) | Cod sursa (job #2365855) | Cod sursa (job #58969) | Cod sursa (job #1349737)
#include <cstdio>
#define DMAX 100010
using namespace std;
int nr[DMAX], n, m;
int binary1(int);
int binary2(int);
int main()
{
int i, op, x, rez;
FILE*fin=fopen ("cautbin.in", "r");
FILE*fout=fopen ("cautbin.out", "w");
fscanf(fin, "%d", &n);
for (i=1; i<=n; ++i)
fscanf(fin, "%d", &nr[i]);
fscanf(fin, "%d", &m);
for (i=1; i<=m; ++i)
{
fscanf(fin, "%d %d", &op, &x);
if (op<2)
{
rez=binary1(x);
if (!op && nr[rez]!=x)
rez=-1;
fprintf(fout, "%d\n", rez);
}
else
fprintf(fout, "%d\n", binary2(x));
}
fclose(fin);
fclose(fout);
return 0;
}
int binary1 (int x)
{
int st=0, dr=n+1, mijl;
while (dr-st>1)
{
mijl=(st+dr)/2;
if (x>=nr[mijl])
st=mijl;
else
dr=mijl;
}
return st;
}
int binary2 (int x)
{
int st=0, dr=n+1, mijl;
while (dr-st>1)
{
mijl=(st+dr)/2;
if (x<nr[mijl])
dr=mijl;
else
st=mijl;
}
return dr;
}