Pagini recente » Cod sursa (job #2727477) | Cod sursa (job #1984478) | Cod sursa (job #2498470) | Cod sursa (job #450453) | Cod sursa (job #2182378)
#include <cstdio>
#include <math.h>
using namespace std;
FILE* FIN=freopen("cautbin.in","r",stdin);
FILE* FOUT=freopen("cautbin.out","w",stdout);
int n,v[100000];
void cer0(int logn)
{
int x,i;
scanf("%d\n",&x);
for(i=-1,logn>>=1;logn;logn>>=1)
if(i+logn<n&&v[i+logn]<=x)
i+=logn;
if(v[i]==x)
printf("%d\n",i+1);
else
printf("-1\n");
}
void cer1(int logn)
{
int x,i;
scanf("%d\n",&x);
for(i=-1,logn>>=1;logn;logn>>=1)
if(i+logn<n&&v[i+logn]<=x)
i+=logn;
printf("%d\n",i+1);
}
void cer2(int logn)
{
int x,i;
scanf("%d\n",&x);
for(i=n-1,logn>>=1;logn;logn>>=1)
if(i-logn>=0&&v[i-logn]>=x)
i-=logn;
printf("%d\n",i+1);
}
int main()
{
int q,i,logn;
char cer;
scanf("%d",&n);
for(logn=1;logn<=n;logn<<=1);
for(i=0;i<n;i++)
scanf("%d",&v[i]);
scanf("%d\n",&q);
for(i=0;i<q;i++)
{
scanf("%c",&cer);
if(cer=='0')
cer0(logn);
else
{
if(cer=='1')
cer1(logn);
else
cer2(logn);
}
}
return 0;
}