Pagini recente » Cod sursa (job #798249) | Cod sursa (job #1266175) | Cod sursa (job #2383946) | Cod sursa (job #449929) | Cod sursa (job #277863)
Cod sursa(job #277863)
#include<stdio.h>
int n,v[100001];
inline int cb0(int x,int st,int dr)
{
if(st > dr) return -1;
int mijl = st + (dr-st)/2;
if(v[mijl] == x) { while(v[++mijl] == x); return mijl; }
else if(v[mijl] < x) return cb0(x,mijl+1,dr);
else return cb0(x,st,mijl-1);
}
inline int cb1(int x)
{
int st,dr,mijl,last = 0;
for(st = 0,dr = n; st <= dr; )
{
mijl = st+(dr-st)/2;
if(v[mijl] <= x) st = mijl+1,last = mijl;
else dr = mijl-1;
}
return last+1;
}
inline int cb2(int x)
{
int st,dr,mijl,last = n+1;
for(st = 0,dr = n; st <= dr; )
{
mijl = st+(dr-st)/2;
if(x <= v[mijl]) dr = mijl-1,last = mijl;
else st = mijl+1;
}
return last+1;
}
int main()
{
int va,i,x,m;
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for(i = 0; i < n; ++i)
scanf("%d",&v[i]);
scanf("%d",&m);
for(; m ; m--)
{
scanf("%d %d",&va,&x);
if(va == 0)
printf("%d\n",cb0(x,0,n));
else if(va == 1)
printf("%d\n",cb1(x));
else
printf("%d\n",cb2(x));
}
fclose(stdin); fclose(stdout);
return 0;
}