Pagini recente » Cod sursa (job #132280) | Cod sursa (job #1007931) | Borderou de evaluare (job #1170036) | Cod sursa (job #890087) | Cod sursa (job #1320912)
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int i,n,v[100100],z,o,p,k;
int binSrch1(int x)
{
int i=0,step=0;
for(step=1 ; step<n ; step<<=1);
for(i=0 ; step ; step>>=1)
if(i+step<=n && v[i+step]<x)
i+=step;
return i+1;
}
int binSrch2(int x)
{
int i=0,step=0;
for(step=1 ; step<n ; step<<=1);
for(i=0 ; step ; step>>=1)
if(i+step<=n && v[i+step]<=x)
i+=step;
return i;
}
/*
int binSrch4(int x)
{
int ls=1,ld=n,mij,y;
mij=(ls+ld)/2;
while(ls<ld)
{
mij=(ls+ld)/2;
if(v[mij]>x)
{
ld=mij-1;
}
else
{
ls=mij;
}
if(mij==y)
break;
y=mij;
}
return ls;
}
int binSrch3(int x)
{
int ls=1,ld=n,mij;
mij=(ls+ld)/2;
while(ls<ld)
{
mij=(ls+ld)/2;
if(v[mij]<x)
{
ls=mij+1;
}
else
{
ld=mij;
}
}
return ls;
}
*/
int main()
{
cin>>n;
for(i=1 ; i<=n ; ++i)
cin>>v[i];
cin>>z;
for(i=1 ; i<=z ; ++i)
{
cin>>o>>p;
if(o==0)
{
k=binSrch2(p);
if(v[k]==p)
cout<<k<<'\n';
else
cout<<-1<<'\n';
}
else if(o==1)
{
cout<<binSrch1(p+1)-1<<'\n';
}
else
{
cout<<binSrch2(p-1)+1<<'\n';
}
}
return 0;
}