Cod sursa(job #283566)

Utilizator cipriancxFMI - gr143 Timofte Ciprian cipriancx Data 19 martie 2009 12:50:46
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>

long int m,m1,i,n,v[100001];
int a;


long int cautare(long int val){

long int i,step;
for(step=1; step<n; step<<=1);

for(i=0; step; step>>=1)if(i+step<n && v[i+step]<=val)i+=step;
return i;
}




int main(void){

freopen("cautbin.in","r",stdin);
freopen("cautbin.out", "w",stdout);


scanf("%ld",&n);



for(i=1; i<n+1; i++ ) scanf("%ld",&v[i]);

scanf("%ld",&m);


for(i=1; i<m+1;  i++){ scanf("%d",&a);  if(a==0){ scanf("%ld",&m1); m1=cautare(m1); if(m1==0 || m1>n)printf("%d\n",-1); else printf("%ld\n",m1);}

                                      else if(a==1){ scanf("%ld",&m1); printf("%ld\n",cautare(m1)); }
                                     
                                      else { scanf("%ld",&m1); long int m2=cautare(m1);  if(m1-v[m2]>=m1-v[m2+1]) printf("%ld\n",m2+1); else printf("%ld\n",m2); }
                 
                     }


return 0;}