Cod sursa(job #765385)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 7 iulie 2012 13:40:03
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<cstdio>
int n,m,i,v[100001],x,y,s,l;
int main()
{freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
       scanf("%d",&v[i]);
scanf("%d",&m);
for(l=1;l<=n;l<<=1);
while(m--)
       {scanf("%d%d",&x,&y);
       for(i=0,s=l;s;s>>=1)
       if(i+s<=n&&v[i+s]<=y)
              i+=s;
       if(!x)
              printf("%d\n",v[i]==y?i:-1);
       else
              if(x==1)
                      if(v[i]==y)
                              {while(v[i]==y)
                                      i++;
                              printf("%d\n",i-1);}
                      else
                              printf("%d\n",i);
              else
                      {while(v[i]==y)
                               i--;
                      printf("%d\n",i+1);}}
return 0;}