Cod sursa(job #661081)

Utilizator Ifm-6Ilie Madalina Ifm-6 Data 13 ianuarie 2012 19:11:26
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <stdio.h>


int a[100005],poz;

 int n,m,i,intr,val;
 int cb0(int x) {
    int mij,hi=n,lo=1,poz=-1;
    while (lo<=hi) {
    mij=(lo+hi)/2;
    if (a[mij]==x)
          {poz=mij;
          lo=mij+1;
          }
          else
          if (a[mij]<x) lo=mij+1;
          else hi=mij-1;}
     return poz;
    }
int cb1(int x) {
    int mij,poz,hi=n,lo=1; ;
    while (lo<=hi) {
          mij=(hi+lo)/2;
          if (a[mij]<=x) {
                         poz=mij;
                         lo=mij+1;
                         }
          else
          hi=mij-1;}
     return poz;
}
int cb2 (int x) {
     int mij,poz, lo=1,hi=n ;
    while (lo<=hi) {
          mij=(hi+lo)/2;
          if (a[mij]>=x) { poz=mij;
                           hi=mij-1;
                           }
               else                       
           lo=mij+1;
           }
     return poz;
}    
         
int main() {
    FILE* f=fopen("cautbin.in", "r");
    FILE* g=fopen("cautbin.out", "w+");
    fscanf(f,"%d", &n);
    for (i=1;i<=n;i++)
        fscanf (f, "%d ", &a[i]);
    fscanf(f,"%d", &m);
    for (i=1;i<=m;i++){
          fscanf (f,"%d %d", &intr, &val);
          if (intr==0) 
              fprintf(g,"%d\n", cb0(val));
           if (intr==1)
              fprintf(g,"%d\n",cb1(val));
          if (intr==2)
              fprintf(g,"%d\n", cb2(val));
              }
    fclose(f);
    fclose(g);
return 0;
}