Pagini recente » Cod sursa (job #39795) | Cod sursa (job #1522903) | Cod sursa (job #2664878) | Cod sursa (job #2207696) | Cod sursa (job #1691515)
#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;
while(v[mj]!=m&&(st!=stp||dr!=drp))
{
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(st==stp&&dr==drp)
mj=-1;
}
if(mj>0)
{
if(q<2)
while(v[mj+1]==v[mj]) mj++;
else
while(v[mj-1]==v[mj]) mj--;
fout<<mj<<'\n';
}
else
{
switch(q)
{
case 0:fout<<-1<<'\n';break;
case 1:fout<<v[mj]<<'\n';break;
case 2:fout<<v[mj+1]<<'\n';break;
}
}
}
}