Cod sursa(job #1333179)
Utilizator | Data | 2 februarie 2015 21:15:37 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.12 kb |
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100001],i,j,mij,ld,ls,a,b,r;
int main()
{int m,n;
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];fin>>m;
for(i=1;i<=m;i++)
{
fin>>a>>b;
if(a==0)
{
ld=n;ls=1;
while(ld>ls)
{
mij=(ls+ld)/2;
if(v[mij]==b)
ls=mij;
else
if(v[mij]<b)
ls=mij+1;
else
ld=mij-1;
if(ls+1==ld||ls==ld)
{
if(v[ld]==b)
fout<<ld;
else
if(v[ls]==b)
fout<<ls;
else
fout<<-1; break;
}
}
}
if(a==1)
{
ld=n;ls=1;
while(ld>ls)
{
mij=(ls+ld)/2;
if(v[mij]<=b)
ls=mij;
else
ld=mij-1;
if(ls+1==ld||ls==ld)
{
if(v[ld]<=b)
fout<<ld;
else
if(v[ls]<=b)
fout<<ls;
else
fout<<-1; break;
}
}
}
if(a==2)
{
ld=n;ls=1;
while(ld>ls)
{
mij=(ls+ld)/2;
if(v[mij]>=b)
ld=mij;
else
ls=mij+1;
if(ls+1==ld||ls==ld)
{
if(v[ls]>=b)
fout<<ls;
else
if(v[ld]>=b)
fout<<ld;
else
fout<<-1;
break;
}
}
}
fout<<'\n';
}
return 0;
}