Cod sursa(job #2346984)

Utilizator raremihaiiordache raremihai Data 18 februarie 2019 11:58:38
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;

}