Cod sursa(job #2346965)

Utilizator Mihai.MocanuMihai mmm Mihai.Mocanu Data 18 februarie 2019 11:47:40
Problema Cautare binara Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.11 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;
  }
  if(v[r]!=x){
    r=-1;
  }
  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=1;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));
    }else{
      if(y==1){
        fprintf(fout,"%d\n",count1(x));
      }else{
        fprintf(fout,"%d\n",count2(x));
      }
    }
  }

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