Pagini recente » Borderou de evaluare (job #134964) | Borderou de evaluare (job #2029719) | Borderou de evaluare (job #2470247) | Cod sursa (job #759363) | Cod sursa (job #3141202)
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int a[100003], m, n, i, q, x;
int lwrbnd(int st, int dr, int val)
{
int mij;
while(st<dr)
{
mij=(st+dr)/2;
if(a[mij]<val) st=mij+1;
else dr=mij;
}
return a[mij];
}
int upprbnd(int st, int dr, int val)
{
int 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
{
int index=0;
for(int 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';
}
}
}
}