Pagini recente » Cod sursa (job #2437480) | Cod sursa (job #3177615) | Cod sursa (job #2176204) | Cod sursa (job #2062204) | Cod sursa (job #270638)
Cod sursa(job #270638)
include <stdio.h>
define MAXN 100005
int n,M;
int v[MAXN];
FILE *in = fopen("cautbin.in","r");
FILE *out = fopen("cautbin.out","w");
void citire()
{
int i;
fscanf(in,"%d",&n);
for (i=1; i<=n; ++i)
fscanf(in,"%d",&v[i]);
fscanf(in,"%d",&M);
}
int serci0(int x)
{
int s,e,m;
s=1; e=n; m=(s+e)/2;
while (s!=e)
{
if (x<=v[m])
e=(s+e)/2;
else
s=(s+e)/2+1;
m=(s+e)/2;
}
if (x<v[s])
{
if (x==v[s-1] && s!=1)
return s-1;
return -1;
}
if (x==v[s])
return s;
return -1;
}
int serci1(int x)
{
int s,e,m;
s=1; e=n; m=(s+e)/2;
while (s!=e)
{
if (x<v[m])
e=(s+e)/2;
else
s=(s+e)/2+1;
m=(s+e)/2;
}
while (s>0 && v[s]>x)
--s;
if (s)
return s;
return -1;
}
int serci2(int x)
{
int s,e,m;
s=1; e=n; m=(s+e)/2;
while (s!=e)
{
if (x<v[m])
e=(s+e)/2;
else
s=(s+e)/2+1;
m=(s+e)/2;
}
s--;
while (v[s]==v[s-1])
s--;
while (s<=n && v[s]<x)
++s;
if (s<=n)
return s;
return -1;
}
void rezolv()
{
int i,a,b,k;
for (i=0; i<M; ++i)
{
fscanf(in,"%d%d",&a,&b);
if (a==0)
{
k=serci0(b);
fprintf(out,"%d\n",k);
}
if (a==1)
{
k=serci1(b);
fprintf(out,"%d\n",k);
}
if (a==2)
{
k=serci2(b);
fprintf(out,"%d\n",k);
}
}
fclose(in);
fclose(out);
}
int main()
{
citire();
rezolv();
return 0;
}