Mai intai trebuie sa te autentifici.

Cod sursa(job #200940)

Utilizator mika17Mihai Alex Ionescu mika17 Data 27 iulie 2008 17:10:47
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#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;
}