Cod sursa(job #2055065)

Utilizator BarbumateiBarbu Matei Barbumatei Data 2 noiembrie 2017 19:59:56
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.87 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
    if(c==0){
      if(v[i]!=x) i=-2;
    }
    else if(c==2 && v[i]<x+1)
      i++;
    fprintf(fout, "%d\n", i+1);
  }
  fclose(fin);
  fclose(fout);
    return 0;
}