Cod sursa(job #1858020)
Utilizator | Data | 26 ianuarie 2017 22:30:16 | |
---|---|---|---|
Problema | Cautare binara | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.61 kb |
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int i,j,n,x[100001],quest[100001],m,nr,gasit,u,p,mij,poz;
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>x[i];
fin>>m;
for(i=1;i<=m;i++)
{
fin>>quest[i];
fin>>nr;
gasit=0;
if(quest[i]==0)
{
p=1;
u=n;
while(p<=u)
{
mij=(u+p)/2;
if(x[mij]==nr)
{
if(mij<u && x[mij]==x[mij+1])
{
p=mij+1;
}
else
{
gasit=1;
fout<<mij<<'\n';
break;
}
}
else
if(x[mij]<nr)
p=mij+1;
else
u=mij-1;
}
if(gasit==0)
fout<<-1<<'\n';
}
if(quest[i]==1)
{
p=1;
u=n;
while(p<=u)
{
mij=(u+p)/2;
if(x[mij]==nr)
{
if(mij<u && x[mij]==x[mij+1])
{
p=mij+1;
}
else
{
poz=mij;
break;
}
}
else
if(x[mij]<nr)
{
poz=mij;
p=mij+1;
}
else
u=mij-1;
}
fout<<poz<<'\n';
}
if(quest[i]==2)
{
p=1;
u=n;
while(p<=u)
{
mij=(u+p)/2;
if(x[mij]==nr)
{
if(mij>p && x[mij]==x[mij-1])
{
u=mij-1;
}
else
{
poz=mij;
break;
}
}
else
if(x[mij]>nr)
{
poz=mij;
u=mij-1;
}
else
p=mij+1;
}
fout<<poz<<'\n';
}
}
return 0;
}