Pagini recente » Cod sursa (job #1098978) | Istoria paginii runda/cei_mai_mari_olimpicari_runda_5/clasament | Cod sursa (job #1105771) | Cod sursa (job #751125) | Cod sursa (job #2252073)
#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]!=a[k])
return -1;
else
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 sol+1;
}
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_binara1(x)<<"\n";
else
out<<cautare_binara2(x)<<"\n";
}
return 0;
}