Pagini recente » Monitorul de evaluare | Profil Darius1414 | Profil DaniWarMaster | Istoria paginii utilizator/denisonic | Cod sursa (job #200940)
Cod sursa(job #200940)
#include <cstdio>
int N,V[100001],M,pow2;
void proc_log()
{
int log2N=0;
for(int i=2;i<=N;++i)
if(!(i&(i-1))) ++log2N;
pow2 = 1<<log2N;
}
int bsc(int e,int op)
{
int i,poww2=pow2;
for(i=1;i<=N && poww2;)
if(V[i+poww2]>e || i+poww2>N) poww2>>=1;
else i+=poww2;
switch (op)
{
case 0: if (V[i]==e) return i;
else return -1;
case 1: return i;
case 2: if(V[i]==e) return i;
else return i+1;
}
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&N);
proc_log();
for(int i=1;i<=N;scanf("%d",&V[i++]));
scanf("%d",&M);
while(M--)
{
int q,p;
scanf("%d %d",&q,&p);
switch (q)
{
case 0: printf("%d\n",bsc(p,0)); break;
case 1: printf("%d\n",bsc(p,1)); break;
case 2: printf("%d\n",bsc(p,2)); break;
}
}
return 0;
}