Cod sursa(job #327622)

Utilizator LuffyBanu Lavinia Luffy Data 29 iunie 2009 16:48:01
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include<stdio.h>
#define dim 100001
int s[dim];
using namespace std;
int main()
{short int q;
int nr,i,n,m,mij,j;
FILE *f=fopen("cautbin.in","r"), *g=fopen("cautbin.out","w");

fscanf(f,"%d",&n);
 for(i=1;i<=n;i++) fscanf(f,"%d",&s[i]);

 mij=s[n/2];
 
fscanf(f,"%d",&m);
 for(i=1;i<=m;i++)
 {fscanf(f,"%hd%d",&q,&nr);
   if(q==0)
	{if(mij==nr) fprintf(g,"%d\n",n/2);
	 if(mij>nr)
        for(j=1;j<mij;j++) {if(s[j]==nr) {fprintf(g,"%d\n",j); break;}
		                    if(s[j]>nr)  {fprintf(g,"-1\n"); break;}
							}
     if(mij<nr)
		for(j=mij;j<=n;j++) {
			           if(s[j]==nr) 
		                 {fprintf(g,"%d\n",j); break;}
		                       if(s[j]>nr)  {fprintf(g,"-1\n"); break;}
							  }
	}

   if(q==1)
     {if(s[n]<nr) {fprintf(g,"%d\n",n); goto pas;}
	 if(mij<nr)
	   for(j=mij+1;j<=n;j++) {if(s[j]>nr) {fprintf(g,"%d\n",j-1); break;} 
	                          }
	 if(mij>nr)
	   for(j=1;j<=mij;j++) {if(s[j]>nr) {fprintf(g,"%d\n",j-1); break;} }
	 pas:if(mij==nr) fprintf(g,"%d\n",n/2); 
	   } 
	 
	
   if(q==2)
   {if(s[n]==nr) {fprintf(g,"%d\n",n); goto pass;}
	if(mij<nr)
	   for(j=mij+1;j<=n;j++) {if(s[j]>=nr) {fprintf(g,"%d\n",j); break;} }
	if(mij>nr)
	   for(j=1;j<=mij;j++) {if(s[j]>=nr) {fprintf(g,"%d\n",j); break;} }
	 pass: if(mij==nr) fprintf(g,"%d\n",n/2); }}
fclose(f);
fclose(g);
return 0;
}