Pagini recente » Cod sursa (job #1012543) | Cod sursa (job #2687840) | Cod sursa (job #1874373) | Cod sursa (job #2580976) | Cod sursa (job #969967)
Cod sursa(job #969967)
#include <fstream>
using namespace std;
int a[1000000],m,n;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
inline void Citire()
{
int i;
fin>>n;
for(i=1;i<=n;i++)
fin>>a[i];
}
inline int Cautbin0(int x)
{
int st=1,dr=n,poz=-1,m;
while(st<=dr)
{
m=(dr+st)/2;
if(a[m]==x)
{
poz=m;
st=m+1;
}
if(x<a[m])
dr=m-1;
if(x>a[m])
st=m+1;
}
return poz;
}
inline int Cautbin1(int x)
{
int st=1,dr=n,poz=0,m;
while(st<=dr)
{
m=(st+dr)/2;
if(a[m]<=x)
{
st=m+1;
poz=m;
}
if(a[m]>x)
dr=m-1;
}
return poz;
}
inline int Cautbin2(int x)
{
int st=1,dr=n,poz=0,m;
while(st<=dr)
{
m=(dr+st)/2;
if(a[m]>=x)
{
dr=m-1;
poz=m;
}
if(a[m]<x)
st=m+1;
}
return poz;
}
inline void Rezolvare()
{
int i,op,x;
fin>>m;
for(i=1;i<=m;i++)
{
fin>>op>>x;
if(op==0)
fout<<Cautbin0(x)<<"\n";
else
if(op==1)
fout<<Cautbin1(x)<<"\n";
else
fout<<Cautbin2(x)<<"\n";
}
}
int main()
{
Citire();
Rezolvare();
return 0;
}