Cod sursa(job #2346935)

Utilizator Mihai.MocanuMihai mmm Mihai.Mocanu Data 18 februarie 2019 11:34:10
Problema Cautare binara Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#include <stdlib.h>
int n;
int v[100000];

const int L=16;
int count0(int x){
  int r=0,pas=1<<L;

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

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

  while(pas!=0){
    if(r+pas<=n && v[r+pas]<x){
      r+=pas;
    }
    pas/=2;
  }
  r++;
  return r;
}

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

  for(i=0;i<n;i++){
    fscanf(fin,"%d",&v[i]);
  }

  fscanf(fin,"%d",&m);
  for(i=0;i<m;i++){
    fscanf(fin,"%d%d",&y,&x);
    if(y==0){
      fprintf(fout,"%d\n",count0(x)+1);
    }else{
      if(y==1){
        fprintf(fout,"%d\n",count1(x)+1);
      }else{
        fprintf(fout,"%d\n",count2(x)+1);
      }
    }
  }

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