Pagini recente » Cod sursa (job #1884234) | Cod sursa (job #2777314) | Cod sursa (job #2064765) | Cod sursa (job #705973) | Cod sursa (job #2573735)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,a[100002],tip,x,q;
int cautare_binara(int val,int step)
{
int poz=0;
for(;step;step>>=1)
{
if(step+poz<=n && a[poz+step]<=val)
{
poz+=step;
}
}
return poz;
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
{
f>>a[i];
}
//sort(a+1,a+n+1);
f>>q;
int step=1;
while(step<n)step<<=1;
for(int i=1;i<=q;i++)
{
f>>tip>>x;
if(tip==0)
{
if(a[cautare_binara(x,step)]==x)g<<cautare_binara(x,step)<<'\n';
else g<<"-1"<<'\n';
}
else if(tip==1)
{
g<<cautare_binara(x,step)<<'\n';
}
else
{
int poz1=cautare_binara(x-1,step)+1;
int poz2=cautare_binara(x,step)+1;
if(a[poz1]==x)g<<poz1<<'\n';
else g<<poz2<<'\n';
}
}
return 0;
}