Pagini recente » Cod sursa (job #1021506) | Cod sursa (job #227107)
Cod sursa(job #227107)
#include<cstdio>
int n,i,x,o,a[100001];
int search(int x)
{
int i,s;
for(s=1;s<n;s<<=1);
for(i=1;s>0;s>>=1)
if(i+s<n && a[i+s]<=x)
i+=s;
if(a[i] == x) return i;
return -1;
}
int lower(int x)
{
int i,s;
for(s=1;s<n;s<<=1);
for(i=1;s>0;s>>=1)
if(i+s<n && a[i+s]<=x)
i+=s;
return i;
}
int upper(int x)
{
int i,s;
for(s=1;s<n;s<<=1);
for(i=n;s>0;s>>=1)
if(i-s>0 && a[i-s]>=x)
i-=s;
return i;
}
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",&i);
do
{
scanf("%d %d",&o,&x);
switch(o)
{
case 0:
x = search(x); break;
case 1:
x = lower(x); break;
case 2:
x = upper(x); break;
}
printf("%d\n",x);
}while(--i);
}