Cod sursa(job #1266938)

Utilizator cella.florescuCella Florescu cella.florescu Data 19 noiembrie 2014 12:24:53
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
#include <stdlib.h>
int v[100001];
int main()
{
    FILE *fin, *fout;
    int n, i, t, tip, x, p2, put, rasp;
    fin=fopen("cautbin.in", "r");
    fscanf(fin, "%d", &n);
    p2=1<<17;
    while(p2>n)
      p2>>=1;
    p2<<=1;
    for(i=1; i<=n; i++)
      fscanf(fin, "%d", v+i);
    fscanf(fin, "%d", &t);
    fout=fopen("cautbin.out", "w");
    for(i=0; i<t; i++){
      fscanf(fin, "%d%d", &tip, &x);
      put=p2;
      if(tip<2){
        rasp=0;
        while(put){
          if(rasp+put<=n && v[rasp+put]<=x)
            rasp+=put;
          put>>=1;
        }
        if(v[rasp]!=x && !tip)
          fprintf(fout, "-1\n");
        else
          fprintf(fout, "%d\n", rasp);
      } else{
          rasp=n;
          while(put){
            if(rasp-put>0 && v[rasp-put]>=x)
              rasp-=put;
            put>>=1;
          }
          fprintf(fout, "%d\n", rasp);
      }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}