Pagini recente » Cod sursa (job #1822087) | Cod sursa (job #844973) | Cod sursa (job #2067092) | Cod sursa (job #57866) | Cod sursa (job #2153774)
#include <fstream>
using namespace std;
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");
int n,k,i,a[100002],m,cer,x,poz;
int cautbin1(int val)
{
int step=1,i;
while (step<n) step=step<<1;
for (i=0;step>0;step>>=1)
{
if (i+step<=n && a[i+step]<=val) i+=step;
}
return i;
}
int cautbin2(int val)
{
int st=1,dr=n,mij;
while (st<=dr)
{
mij = st + (dr-st)/2;
if (a[mij]>=val)
{
poz=mij;
dr=mij-1;
}
else st=mij+1;
}
return poz;
}
int main()
{
f>>n;
for (i=1;i<=n;i++) f>>a[i];
f>>m;
for (i=1;i<=m;i++)
{
f>>cer>>x;
if (cer==0)
{
poz=cautbin1(x);
if(a[poz]==x) g<<poz<<'\n';
else g<<"-1"<<'\n';
}
else if (cer==1)
{
poz=cautbin1(x);
g<<poz<<'\n';
}
else
{
poz=cautbin2(x);
g<<poz<<'\n';
}
}
return 0;
}