Cod sursa(job #2929697)

Utilizator RaresHRares Hanganu RaresH Data 26 octombrie 2022 16:16:39
Problema Cautare binara Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <stdio.h>

#define MAXN 100000

int v[MAXN];

int main() {
  FILE *fin, *fout;
  int n, m, i, tip_intrebare, x, stanga, dreapta, mijloc;

  fin = fopen("cautbin.in", "r");
  fscanf(fin, "%d", &n);
  for(i = 0; i < n; i++)
    fscanf(fin, "%d", &v[i]);
  fscanf(fin, "%d", &m);

  fout = fopen("cautbin.out", "w");
  for(i = 0; i < m; i++) {
    fscanf(fin, "%d%d", &tip_intrebare, &x);
    if(tip_intrebare == 0 || tip_intrebare == 1) {
      stanga = 0;
      dreapta = n;
      while(dreapta - stanga > 1) {
        mijloc = (dreapta + stanga) / 2;
        if(v[mijloc] > x)
          dreapta = mijloc;
        else
          stanga = mijloc;
      }
      if(tip_intrebare == 0)
        fprintf(fout, "%d\n", x == v[stanga] ? stanga + 1 : -1);
      else
        fprintf(fout, "%d\n", stanga + 1);
    } else {
      stanga = -1;
      dreapta = n - 1;
      while(dreapta - stanga > 1) {
        mijloc = (dreapta + stanga) / 2;
        if(v[mijloc] < x) {
          stanga = mijloc;
        } else {
          dreapta = mijloc;
        }
      }
      fprintf(fout, "%d\n", dreapta + 1);
    }
  }
  fclose(fin);
  fclose(fout);

  return 0;
}