Cod sursa(job #263754)
Utilizator | Data | 20 februarie 2009 19:42:19 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.66 kb |
#include<fstream.h>
#define xx 100001
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,m,v[xx];
int main()
{
fin>>n;
int i,x,ultim,li,ls,mij,sw;
for(i=1;i<=n;i++)
fin>>v[i];
fin>>m;
for(;m;m--)
{
fin>>i>>x;
if(i==0)
{
for(li=1,ls=n,sw=1;li<=ls && sw;)
{
mij=(li+ls)/2;
if(x<v[mij])
ls=mij-1;
else
if(v[mij]<x)
li=mij+1;
else
if(v[mij]==x)
{
fout<<mij<<'\n';
sw=0;
}
}
if(sw==1)
fout<<"-1\n";
}
else
if(i==1)
{
for(li=1,ls=n;li<=ls;)
{
mij=(li+ls)/2;
if(v[mij]<=x)
{
ultim=mij;
li=mij+1;
}
else
ls=mij-1;
}
fout<<ultim<<'\n';
}
else
{
for(li=1,ls=n;li<=ls;)
{
mij=(li+ls)/2;
if(v[mij]>=x)
{
ultim=mij;
ls=mij-1;
}
else
li=mij+1;
}
fout<<mij<<'\n';
}
}
fout.close();
return 0;
}