Pagini recente » Cod sursa (job #2842391) | Autentificare | Cod sursa (job #2669879) | Cod sursa (job #2078559) | Cod sursa (job #1761712)
#include <stdio.h>
int n,m,i,j,k,a[100009],p;
const int buff_size=4096;
char buff[buff_size];
int _i=buff_size;
int next_int(FILE * in)
{
char x;
int z=0;
if (_i==buff_size)
fread(buff,buff_size,1,in),_i=0;
x=1;
while (x<48 || x> 57)
{
x=buff[_i];
_i++;
if (_i==buff_size)
{
fread(buff,buff_size,1,in);
_i=0;
}
}
while (x>=48 && x<=57)
{
z=(z<<1)+(z<<3)+x-48;
x=buff[_i];
_i++;
if (_i==buff_size)
{
fread(buff,buff_size,1,in);
_i=0;
}
}
return z;
}
int b1(int x)
{
int i,pp;
for (i=0,pp=p; pp ; pp>>=1)
if (i+pp<n && a[i+pp]<=x)
i+=pp;
return i;
}
int b2(int x)
{
int i,pp;
for (i=n,pp=p; pp ; pp>>=1)
if (i-pp>=0 && a[i-pp]>=x)
i-=pp;
return i;
}
int main(int argc, char const *argv[])
{
FILE * in = fopen("cautbin.in","r");
FILE * out= fopen("cautbin.out","w");
n=next_int(in);
for (p=1;p<=n;p<<=1) ;
for (i=0;i<n;++i)
a[i]=next_int(in);
m=next_int(in);
while (m--)
{
i=next_int(in);
j=next_int(in);
if (i==0)
{
i=b1(j);
if (a[i]==j)
fprintf(out, "%d\n",i+1); else
fprintf(out,"-1\n");
} else
{
if (i==1)
fprintf(out,"%d\n",b1(j)+1); else
if (i==2)
fprintf(out,"%d\n",b2(j)+1);
}
}
fclose(in);
fclose(out);
return 0;
}