Pagini recente » Cod sursa (job #1941668) | Cod sursa (job #2856039) | Cod sursa (job #1446289) | Cod sursa (job #2331241) | Cod sursa (job #1388997)
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int s[100001];
int t; // nr de teste
int n; // length of the serie
int binary(int val)
{
int i, step;
for(step=1;step<<1<n;step<<=1);
for(i=0; step; step>>=1)
if(i+step<n && s[i+step] <= val)
i+=step;
return i;
}
int binary2(int val)
{
int i, step;
for(step=1;step<<1<n;step<<=1);
for(i=0; step; step>>=1)
if(i+step<n && s[i+step] < val)
i+=step;
return i;
}
int main() {
fin>>n;
for(int i=1; i<=n; ++i)
fin>>s[i];
fin>>t;
for(;t>0; --t)
{
int a,x,i;
fin>>a>>x;
switch(a)
{
case 0:
i=binary(x);
if(s[i]==x)
fout<<i;
else
fout<<-1;
break;
case 1:
i=binary(x);
fout<<i;
break;
case 2:
i=binary2(x);
fout<<i;
break;
}
fout<<"\n";
}
return 0;
}