Pagini recente » Cod sursa (job #2094372) | Cod sursa (job #1397945) | Cod sursa (job #698331) | Cod sursa (job #2187543) | Cod sursa (job #331349)
Cod sursa(job #331349)
#include<stdio.h>
int v[100005],lo, hi, mid, soll;
int N, T, x, y;
int zero(int sol)
{
for(lo=1,hi=N;lo<=hi;)
{mid = lo + (hi-lo)/2;
if(v[mid]<sol)lo=mid+1;
else if(v[mid]>sol)hi=mid-1;
else if(v[mid]==sol)return mid;
}
return -1;
}
int unu(int sol)
{ for(lo=1,hi=N;lo<=hi;)
{mid = lo + (hi-lo)/2;
if(v[mid]==sol)return mid;
else if(v[mid]<sol){soll=mid;lo=mid+1;}
else if(v[mid]>sol)hi=mid-1;
}
return soll;
}
int doi(int sol)
{ for(lo=1,hi=N;lo<=hi;)
{mid = lo + (hi-lo)/2;
if(v[mid]==sol)return mid;
else if(v[mid]<sol){lo=mid+1;soll=mid+1;}
else if(v[mid]>sol)hi=mid-1;
}
return soll;
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&N);
for(T=1;T<=N;T++)
scanf("%d",&v[T]);
scanf("%d",&T);
for(;T;--T)
{
scanf("%d%d",&x,&y);
if(!x)printf("%d\n",zero(y));
else if(x==1)printf("%d\n",unu(y));
else printf("%d\n",doi(y));
}
return 0;
}