Cod sursa(job #2354438)

Utilizator bianca_maria06Bianca Ciobanu bianca_maria06 Data 25 februarie 2019 12:20:30
Problema Cautare binara Scor 40
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <stdlib.h>

const int L=16;

FILE*fin,*fout;

int v[10001],n;

int caut0(int x){
  int r1=0,pas=1<<L;
  while(pas!=0){
    if(r1+pas<=n && v[r1+pas]<=x){
      r1+=pas;
    }
    pas=pas/2;
  }
  if(v[r1]!=x){
    r1=-1;
  }
  return r1;
}

int caut1(int x){
  int r2=0,pas=1<<L;
  while(pas!=0){
    if(r2+pas<=n && v[r2+pas]<=x){
      r2+=pas;
    }
    pas=pas/2;
  }
  //fprintf(fout,"%d\n", r);

  return r2;
}

int caut2(int x){
  int r=0,pas=1<<L;
  while(pas!=0){
    if(r+pas<=n && v[r+pas]<x){
      r+=pas;
    }
    pas=pas/2;
  }
  r++;
  //fprintf(fout,"%d", r);
  return r;
}

int main(){
    fin=fopen("cautbin.in", "r");
    fout=fopen("cautbin.out", "w");
    int i,m,a,x;
    fscanf(fin,"%d",&n);
    for(i=1;i<=n;i++)
      fscanf(fin,"%d",&v[i]);
    fscanf(fin,"%d",&m);
    for(i=0;i<m;i++){
      fscanf(fin,"%d%d",&a,&x);
      if(a==0){
        fprintf(fout,"%d\n",caut0(x));
      }
      if(a==1){
        fprintf(fout,"%d\n",caut1(x));
      }
      if(a==2){
        fprintf(fout,"%d\n",caut2(x));
      }
    }
    return 0;
}