Cod sursa(job #2340939)

Utilizator Mihai.MocanuMihai mmm Mihai.Mocanu Data 11 februarie 2019 12:21:42
Problema Cautare binara Scor 60
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <stdio.h>
#include <stdlib.h>

int caut_bin_0(int n,int x,int v[100001]){
  int st,dr,m;
  st=1;
  dr=n;
  while(st<dr){
    m=(st+dr)/2;
    if(v[m]>x){
      dr=m;
    }else{
      st=m+1;
    }
  }
  st--;

  if(v[st]==x){
    return st;
  }else{
    return -1;
  }
}
int caut_bin_1(int n,int x,int v[100001]){
  int st,dr,m;
  st=1;
  dr=n;
  while(st<dr){
    m=(st+dr)/2;
    if(v[m]>x){
      dr=m;
    }else{
      st=m+1;
    }
  }

  return st-1;
}
int caut_bin_2(int n,int x,int v[100001]){
  int st,dr,m;
  st=1;
  dr=n;
  while(st<dr){
    m=(st+dr)/2;
    if(v[m]>=x){
      dr=m;
    }else{
      st=m+1;
    }
  }

  return st;
}

int v[100001];

int main(){
  int n,i,m,x,a;
  FILE *fin,*fout;
  fin=fopen("cautbin.in","r");
  fout=fopen("cautbin.out","w");
  fscanf(fin,"%d",&n);

  for(i=1;i<=n;i++){
    fscanf(fin,"%d",&v[i]);
  }
  fscanf(fin,"%d",&m);
  for(i=1;i<=m;i++){
    fscanf(fin,"%d%d",&a,&x);
    if(a==0){
      fprintf(fout,"%d\n",caut_bin_0(n,x,v));
    }else{
      if(a==1){
        fprintf(fout,"%d\n",caut_bin_1(n,x,v));
      }else{
        fprintf(fout,"%d\n",caut_bin_2(n,x,v));
      }
    }
  }


  fclose(fin);
  fclose(fout);
  return 0;
}