Pagini recente » Cod sursa (job #999017) | Cod sursa (job #3131604) | Cod sursa (job #2731404) | Cod sursa (job #585278) | Cod sursa (job #3141209)
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
long a[100003], m, n, i, q, x;
long lwrbnd(long st, long dr, long val)
{
long mij;
while(st<dr)
{
mij=(st+dr)/2;
if(a[mij]<val) st=mij+1;
else dr=mij;
}
return a[mij];
}
long upprbnd(long st, long dr, long val)
{
long mij;
while(st<dr)
{
mij=(st+dr+1)/2;
if(a[mij]<val) st=mij+1;
else dr=mij;
}
return a[mij];
}
int main()
{
cin>>n;
for(i=1;i<=n;++i)
cin>>a[i];
cin>>m;
for(i=0;i<=m;++i)
{
cin>>q>>x;
if(q==1) cout<<upprbnd(1, n, x)<<'\n';
else if(q==2) cout<<lwrbnd(1, n, x)<<'\n';
else
{
long index=0;
for(long bit=4;bit>=0;bit--)
{
index += (1<<bit);// adaugam nr 2^bit
//modif un sg bit
if(index > n || a[index]>x) index -= (i<<bit);
cout<<index<<'\n';
}
}
}
}