Pagini recente » Cod sursa (job #1316150) | Cod sursa (job #3155120) | Cod sursa (job #1812337) | Cod sursa (job #809258) | Cod sursa (job #653627)
Cod sursa(job #653627)
#include<stdio.h>
using namespace std;
int x,tip,i,p,m,u,n,nri,a[100002];
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
scanf("%d",&nri);
for(i=1;i<=nri;i++)
{
scanf("%d",&tip);
scanf("%d",&x);
if(tip==0)
{
p=1;
u=n;
while(p<=u)
{
m=(p+u)/2;
if(a[m]>x+1) u=m-1;
else
if(a[m]<x+1) p=m+1;
else break;
}
if(p>u)
{
if(a[p-1]==x) printf("%d\n",p-1);
else printf("-1\n");
}
else
{
i=m;
while(a[i]=x+1) i--;
if(a[i]==x) printf("%d\n",i);
else printf("-1\n");
}
}
else
if(tip==1)
{
p=1;
u=n;
while(p<=u)
{
m=(p+u)/2;
if(a[m]>x+1) u=m-1;
else
if(a[m]<x+1) p=m+1;
else break;
}
if(p>u) printf("%d\n",p-1);
else
{
i=m;
while(a[i]==x+1) i--;
printf("%d\n",i);
}
}
else
{
p=1;
u=n;
while(p<=u)
{
m=(p+u)/2;
if(a[m]>x-1) u=m-1;
else
if(a[m]<x-1) p=m+1;
else break;
}
if(p>u) printf("%d\n",p);
else
{
i=m;
while(a[i]==x-1) i++;
printf("%d\n",i);
}
}
}
return 0;
}