Cod sursa(job #344794)

Utilizator sunshine16mara beatrice sunshine16 Data 31 august 2009 17:10:49
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream.h>
#include <fstream.h>
int main()
{

long n,m,inc,sf,mij,pb,x,sir[100000],gasit,verif;
ifstream t("cautbin.in");
ofstream s("cautbin.out");
t>>n;
for(x=1;x<=n;x++)
  t>>sir[x];
t>>m;
while(m!=0)
{ t>>pb; t>>x; m--;
  inc=1; sf=n; mij=(inc+sf)/2; gasit=0; verif=0;
  if(pb==0)
    { while((inc<=sf)&&(gasit==0))
      { if((x==sir[mij])&&(sir[mij+1]>x))
          { s<<mij;
	        gasit=1;            
          }
		else if(x==sir[mij]) while(x==sir[mij]) {mij++; verif=1;}
		if(verif==1) {s<<mij-1; gasit=1;}
		 if(x<=sir[mij]) sf=mij-1;
			else inc=mij+1;
		 mij=(inc+sf)/2;
	  }
      if (gasit==0) s<<"-1";
	}
	
    if (pb==1)
    { while((inc<=sf)&&(gasit==0))
	   {if((sir[mij]<=x)&&(sir[mij+1]>x))
          { s<<mij;
	        gasit=1;            
          }
		else if(x==sir[mij]) while(x==sir[mij]) {mij++; verif=1;}
		if(verif==1) {s<<mij-1; gasit=1;}
		 if(x<=sir[mij]) sf=mij-1;
			else inc=mij+1;
		 mij=(inc+sf)/2;
	    }
	}  
	
    if(pb==2)
      { while((inc<=sf)&&(gasit==0))
         {if((sir[mij]>=x)&&(sir[mij+1]>x)&&(sir[mij-1]<x))
          { s<<mij;
	        gasit=1;            
          }
		else if((x==sir[mij])||(x==sir[mij-1])) 
			   { if(x==sir[mij-1])
				   mij=mij-1;
			   while(x==sir[mij])
			     {mij--; 
			      verif=1;
				 }
				 }
		if(verif==1) {s<<mij+1; gasit=1;}
		 if(x<=sir[mij]) sf=mij-1;
			else inc=mij+1;
		 mij=(inc+sf)/2;
	    }
	    }
      }

}