Pagini recente » Cod sursa (job #49157) | Cod sursa (job #1311057) | Cod sursa (job #1968143) | Cod sursa (job #1869602) | Cod sursa (job #245929)
Cod sursa(job #245929)
#include <stdio.h>
int main()
{
int n,v[100001],m,tipm,x,l1,l2;
char prost=1;
freopen ("cautbin.in","r",stdin);
freopen ("cautbin.out","w",stdout);
scanf ("\n%d",&n);
for (int i = 1; i <= n; ++i)
scanf ("\n%d",&v[i]);
scanf ("\n%d",&m);
for (int nrm = 1; nrm <= m; ++nrm)
{
scanf ("%d%d",&tipm,&x);
if (x > v [n])
if (tipm==0)
if (prost)
{
printf ("%d",-1);
prost=0;
}
else printf ("\n%d",-1);
else if (prost)
{
printf ("%d",n);
prost=0;
}
else printf ("\n%d",n);
else
{
switch (tipm)
{
case 0:
l1=1;
l2=n;
while ((v [l1] < x)&&(v [l2] > x)&&(l1+1<l2))
if (v [(l1+l2)/2] < x)
l1 = (l1+l2)/2;
else l2 = (l1+l2)/2;
if (v [l1] == x)
if (prost)
{
printf ("%d",l1);
prost=0;
}
else printf ("\n%d",l1);
else if (v [l2] == x)
if (prost)
{
printf ("%d",l2);
prost=0;
}
else printf ("\n%d",l2);
else if (prost)
{
printf ("%d",-1);
prost=0;
}
else printf ("\n%d",-1);
break;
case 1:
l1=1;
l2=n;
while ((v [l1] < x)&&(v [l2] > x)&&(l1+1<l2))
if (v [(l1+l2)/2] < x)
l1 = (l1+l2)/2;
else l2 = (l1+l2)/2;
if (prost)
{
printf ("%d",l1);
prost=0;
}
else printf ("\n%d",l1);
break;
case 2:
l1=1;
l2=n;
while ((v [l1] < x)&&(v [l2] > x)&&(l1+1<l2))
if (v [(l1+l2)/2] < x)
l1 = (l1+l2)/2;
else l2 = (l1+l2)/2;
if (prost)
{
printf ("%d",l2);
prost=0;
}
else printf ("\n%d",l2);
break;
}
}
}
return 0;
}