Cod sursa(job #523368)

Utilizator titeltitel popescu titel Data 17 ianuarie 2011 21:34:40
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream.h>
ifstream f("cautbin.in"); ofstream g("cautbin.out");
int n,i,T,m,p,u,tip,x,poz,a[100001];

int main()
{f>>n; for(i=1 ;i<=n; i++)f>>a[i]; 
 f>>T;
 while(T)
 {f>>tip>>x;
  p=1; u=n; poz=-1;
  switch(tip)
   {case 0: do
			{m=(p+u)/2;
			 if(a[m]==x)
				  {poz=m; p=m+1;
				   while(p<=u)
					{m=(p+u)/2;
					 if(a[m]==x) {poz=m; p=m+1;} else u=m-1;
					}
				  }
				else if(a[m]<x) u=m-1; else p=m+1; 
			}	 
			while(p<=u);  
			g<<poz<<'\n';
		    break;
	case 1: do
			{m=(p+u)/2;
			 if(a[m]==x)
				  {poz=m; p=m+1;
				   while(p<=u)
					{m=(p+u)/2;
					 if(a[m]==x) {poz=m; p=m+1;} else u=m-1;
					}
				  }
				else if(a[m]<x) u=m-1; else p=m+1; 
			}	 
			while(p<=u); 
			if(poz==-1) poz=u;
			g<<poz<<'\n';
		    break;
	case 2: do
			{m=(p+u)/2;
			 if(a[m]==x)
				  {poz=m; u=m-1;
				   while(p<=u)
					{m=(p+u)/2;
					 if(a[m]==x) {poz=m; u=m-1;} else p=m+1;
					}
				  }
				else if(a[m]<x) u=m-1; else p=m+1; 
			}	 
			while(p<=u); 
			if(poz==-1) poz=u;
			g<<poz<<'\n';
   }
  T--;
 }
 g.close(); return 0;
}