Pagini recente » Cod sursa (job #2856986) | Cod sursa (job #940926) | Cod sursa (job #3169525) | Cod sursa (job #933496) | Cod sursa (job #1920710)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
const int nmax=100005;
int a[nmax],n,m;
int bin_search (int val)
{
int step=1,poz=0;
while (step<n)
step<<=1;
while (step)
{
if (poz+step<=n)
{
if (a[poz+step]<=val)
poz+=step;
}
step>>=1;
}
return poz;
}
int main()
{
int op,valores,pozitie,i;
/*
0 x - cea mai din dreapta pozitie a lui x , -1 daca nu exista x
1 x - cea mai din dreapta pozitie a lui x , garantata
2 x - cea mai din stanga pozitie a lui x , garantata
*/
f>>n;
for (i=1;i<=n;i++)
f>>a[i];
f>>m;
while (m--)
{
f>>op;
f>>valores;
if (op==0)
{
pozitie=bin_search(valores);
if (a[pozitie]==valores)
g<<pozitie<<'\n';
else
g<<"-1"<<'\n';
}
if (op==1)
{
pozitie=bin_search(valores);
g<<pozitie<<'\n';
}
if (op==2)
{
pozitie=bin_search(valores-1);
g<<pozitie+1<<'\n';
}
}
return 0;
}