Cod sursa(job #2457358)

Utilizator anabatAna Batrineanu anabat Data 17 septembrie 2019 15:44:56
Problema Cautare binara Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <stdio.h>
#include <stdlib.h>

#define NMAX 100000

int v[NMAX];

int main()
{
  FILE *fin,*fout;
  fin=fopen("cautbin.in","r");
  fout=fopen("cautbin.out","w");

  int st,dr,n,x,m,p,mij=0,i,j;
  fscanf(fin,"%d",&n); ///nr de elemente din vector
  for(i=1;i<=n;i++){
    fscanf(fin,"%d",&v[i]); ///sirul de nr
  }
  fscanf(fin,"%d",&m); ///nr de intrebari
  for(i=0;i<m;i++){
    fscanf(fin,"%d%d",&p,&x); ///tipul de intrebare si x ul

    st=0;
    dr=n-1;

    while(st<dr){
      mij=(st+dr)/2+1;
      if(x>=v[mij]){
        st=mij;
      }
      else{
        dr=mij+1;
      }
    }
    if(p==0){
      if(x==v[st]){
        fprintf(fout,"%d\n",st);
      }
      else{
        fprintf(fout,"-1\n");
      }
    }
    else if(p==1){
      if(x==v[st]){
         fprintf(fout,"%d\n",st);
      }
      else{
        for(j=n;j>0;j++){
          if(v[j]<x){
            fprintf(fout,"%d\n",j);
            j=0;
          }
        }
      }
    }
    else if(p==2){

        for(j=0;j<n;j++){
          if(v[j]==x){
            fprintf(fout,"%d\n",j);
            j=n;
          }
          else if(v[j]>x){
            fprintf(fout,"%d\n",j);
            j=n;
          }
        }
      }

  }



  fclose(fin);
  fclose(fout);
  return 0;
}