Cod sursa(job #195751)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 21 iunie 2008 16:26:17
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.91 kb
# include <stdio.h>

# define FIN "cautbin.in"
# define FOUT "cautbin.out"
# define MAXN 100001

long nr[MAXN];
long N, M, i, ind, val;

     void search1(long val)
     {
          long st=1, dr=N, mij, poz=-1;
          while (st<=dr)
            {
                mij=(st+dr)/2;
                if (nr[mij] == val)
                  {
                      poz=mij;
                      st=mij+1;
                  }
              else
                if (nr[mij]<val) st=mij+1;
                  else dr=mij-1;
            }
          
          printf("%ld\n",poz);
     }
     
     void search2(long val)
     {
          long st=1, dr=N, mij, poz;
          while (st<=dr)
            {
                mij=(st+dr)/2;
                if (nr[mij]<=val)
                  {
                      poz=mij;
                      st=mij+1;
                  }
              else
                dr=mij-1;
            }
          printf("%ld\n",poz);
     }
     
     void search3(long val)
     {
          long st=1, dr=N, mij, poz;
          while (st<=dr)
            {
                mij=(st+dr)/2;
                if (nr[mij]>=val)
                  {
                     poz=mij;
                     dr=mij-1;
                  }
                else 
                  st=mij+1;
            }
          printf("%ld\n",poz);
     }

     int main()
     {
         freopen(FIN,"r",stdin);
         freopen(FOUT,"w",stdout);
         
         scanf("%ld",&N);
         
         for (i = 1; i <= N; ++i)
           scanf("%ld",&nr[i]);
           
         scanf("%ld",&M);
         
         for (i = 1; i <= M; ++i)
           {
                scanf("%ld %ld",&ind,&val);
                if (ind == 0) search1(val);
                if (ind == 1) search2(val);
                if (ind == 2) search3(val);
           }
           
         return 0;
     }