Pagini recente » Cod sursa (job #2567651) | Cod sursa (job #1196417) | Cod sursa (job #1832688) | Cod sursa (job #535822) | Cod sursa (job #2252093)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int a[100001],n;
int cautare_binara1(int k)
{
int sol=0;
for(int i=30;i>=0;--i)
if((1<<i)+sol<=n && a[(1<<i)+sol]<=k)
sol=sol+(1<<i);
if(a[sol]<k)
return -1;
else
return sol;
}
int cautare_binara3(int k)
{
int sol=0;
for(int i=30;i>=0;--i)
if((1<<i)+sol<=n && a[(1<<i)+sol]<=k)
sol=sol+(1<<i);
return sol;
}
int cautare_binara2(int k)
{
int sol=0;
for(int i=30;i>=0;--i)
if((1<<i)+sol<=n && a[(1<<i)+sol]<k)
sol=sol+(1<<i);
return 1+sol;
}
int main()
{
in>>n;
for(int i=1;i<=n;++i)
in>>a[i];
int m;
in>>m;
for (int i=1;i<=m;++i){
int c , x;
in >> c >> x;
if (! c)
out<<cautare_binara1(x)<<"\n";
else
if (c==1)
out<<cautare_binara3(x)<<"\n";
else
out<<cautare_binara2(x)<<"\n";
}
return 0;
}