Cod sursa(job #1697616)

Utilizator BarbumateiBarbu Matei Barbumatei Data 2 mai 2016 15:35:28
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>
#include <stdlib.h>
int v[100000];
int main(){
  int n, m, c, i, x;
  int log=1, lg;
  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);
  while(log<n) log<<=1; ///construim cea mai mare putere mai mare sau egala decat n a lui 2
  while(m--){
    fscanf(fin, "%d%d", &c, &x);
    if(c==2) x--;
    lg=log;
    for(i=0; lg; lg>>=1)
      if(i+lg<n && v[i+lg]<=x)///daca mai adaugam bitul la care ne aflam nu iesim din vector( < n )
        i+=lg; ///si daca il adaugam numarul care se afla pe e mai mic sau egal decat valoarea cautata
    i=(v[i]!=x && c==0) ? -1 : i;
    i= (c==2 && v[i]<x+1) ? i++ : i;
    fprintf(fout, "%d\n", i+1);
  }
  fclose(fin);
  fclose(fout);
    return 0;
}