Cod sursa(job #260680)

Utilizator mrpopescuPopescu Mihai Tudor mrpopescu Data 17 februarie 2009 14:12:24
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.29 kb
#include <stdio.h>
#include <stdlib.h>
typedef struct operatie{
	long int op;
   long long x;
} interogare;
#define DIMMAX 100000
#define deschidere(cale,mod,flux)\
	if((flux=fopen(cale,mod))==NULL){\
   	printf("\nNu se poate deschide fisierul %s.\n",cale);\
      exit(1);\
   }
int main(){
	long long v[DIMMAX],n,m,i,j;
   interogare o[DIMMAX];
   FILE *f,*g;
   deschidere("cautbin.in","rt",f);
   deschidere("cautbin.out","wt",g);
   fscanf(f,"%lld",&n);
   for(i=0;i<n;i++) fscanf(f,"%lld",&v[i]);
   fscanf(f,"%lld",&m);
   for(i=0;i<m;i++) fscanf(f,"%ld %lld",&o[i].op,&o[i].x);
   for(i=0;i<m;i++)
   	switch(o[i].op){
      	case 0:
         	j=0;
         	while(v[j]<o[i].x) j++;
            if(v[j]!=o[i].x) fprintf(g,"-1\n");
            	else{
                while(v[j]==o[i].x) j++;
                fprintf(g,"%lld\n",j-1);
                }
            break;
         case 1:
         	j=0;
            while(v[j]<o[i].x) j++;
            if(v[j]==o[i].x) fprintf(g,"%lld\n",j);
            	else fprintf(g,"%lld\n",j-1);
            break;
         case 2:
         	j=n-1;
            while(v[j]>o[i].x) j--;
            if(v[j]==o[i].x) fprintf(g,"%lld\n",j);
            	else fprintf(g,"%lld\n",j+1);
   	}
   fclose(f);
   fclose(g);
   return 0;
}