Cod sursa(job #528858)

Utilizator mening12001Andrei Geogescu mening12001 Data 3 februarie 2011 16:43:58
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include<iostream.h>
#include<fstream.h>
struct intrebare{int a,x;};
long long a[100001];
long long  cautab1(long long st,long long dr,long long x)
{long long mij,g=0,i,z;
z=dr;
while(st<=dr)
{mij=(st+dr)/2;
if(a[mij]==x)
	{g=1;
break;}
if(a[mij]<x)
	st=mij+1;
if(a[mij]>x)
	dr=mij-1;
}
if(g==1)
	return mij;
	else
	return -1;}
/////////////////////////////
long long cautab2(long long st,long long dr,long long x)
{long long mij,g=0,i,z;
z=dr;
while(st<=dr)
{mij=(st+dr)/2;
if(a[mij]<=x)
	{g=1;
break;}
if(a[mij]>x)
	dr=mij-1;
}
if(g==1)
return mij;
	
else
	return -1;}
//////////////////////////
long long cautab3(long long st,long long dr,long long x)
{long long mij,g=0,i;
while(st<=dr)
{mij=(st+dr)/2;
if(a[mij]>=x)
	{g=1;
break;}
if(a[mij]<x)
	st=mij+1;
}
if(g==1)
	return mij;
	else
	return -1;}
/////////////////////





int main()
{long long m,i,n,z,y,j;
intrebare b[100001];	
ifstream f("cautbin.in");
ofstream h("cautbin.out");
f>>n;
for(i=1;i<=n;i++)
	f>>a[i];
f>>m;



for(j=1;j<=m;j++)
{f>>b[j].a>>b[j].x;
	

if(b[j].a==0)
	{y=cautab1(1,n,b[j].x);
	for(i=y;i<=n;i++)
		if(a[i]!=a[y])
			{h<<i-1<<endl;
			break;}
	
	}
	
	
	
if(b[j].a==1)
{y=cautab2(1,n,b[j].x);
	for(i=y;i<=n;i++)
		if(a[i]>b[j].x)
		{h<<i-1<<endl;
		break;}
		}
if(b[j].a==2)
{y=cautab3(1,n,b[j].x);
	for(i=y;i>=1;i=i-1)
		if(a[i]<b[j].x)
		{h<<i+1<<endl;
		break;}
		}


}
		
return 0;}