Pagini recente » Cod sursa (job #2187200) | Cod sursa (job #219162) | Cod sursa (job #1472504) | Cod sursa (job #562827) | Cod sursa (job #1691524)
#include<fstream>
using namespace std;
int v[100001];
int main()
{
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int i,n,m,st,dr,mj,q,x;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>v[i];
}
fin>>x;
for(i=1;i<=x;i++)
{
fin>>q>>m;
st=1;
dr=n;
int stp=0,drp=0;
mj=(st+dr)/2;
if(q==0||q==2)
while(v[mj]!=m&&(stp!=st||drp!=dr))
{
stp=st;
drp=dr;
if(v[mj]>m)
{
dr=mj;
mj=(dr+st+1)/2;
continue;
}
if(v[mj]<m)
{
st=mj;
mj=(dr+st+1)/2;
continue;
}
}
else
while(v[mj]!=m&&(stp!=st||drp!=dr))
{
stp=st;
drp=dr;
if(v[mj]>m)
{
dr=mj;
mj=(dr+st)/2;
continue;
}
if(v[mj]<m)
{
st=mj;
mj=(dr+st)/2;
continue;
}
}
if(m==v[mj])
{
if(q<2)
while(v[mj+1]==v[mj]) mj++;
else
while(v[mj-1]==v[mj]) mj--;
}
if(m!=v[mj]&&q==0) fout<<-1<<'\n';
else
fout<<mj<<'\n';
}
}