Pagini recente » Cod sursa (job #1967866) | Cod sursa (job #2922792) | Cod sursa (job #2392248) | Cod sursa (job #1686547) | Cod sursa (job #1729432)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,v[100001];
int f0(int val)
{
int mask,poz=0;
for(mask=1; mask<=n; mask<<=1);
mask>>=1;
for(; mask; mask>>=1)
if(poz+mask<=n)
if(v[poz+mask]<=val)
poz+=mask;
if(v[poz]==val)
return poz;
poz=-1;
return poz;
}
int f1(int val)
{
int mask,poz=0;
for(mask=1; mask<=n; mask<<=1);
mask>>=1;
for(; mask; mask>>=1)
if(poz+mask<=n)
if(v[poz+mask]<=val)
poz+=mask;
return poz;
}
int f2(int val)
{
int mask,poz=n;
for(mask=1; mask<=n; mask<<=1);
mask>>=1;
for(; mask; mask>>=1)
if(poz-mask>=1)
if(v[poz-mask]>=val)
poz-=mask;
return poz;
}
int main()
{
int i,tip,m;
fin>>n;
for(i=1; i<=n; i++)
fin>>v[i];
fin>>m;
int x;
for(i=1; i<=m; i++)
{
fin>>tip>>x;
if(tip==0)
fout<<f0(x)<<'\n';
if(tip==1)
fout<<f1(x)<<'\n';
if(tip==2)
fout<<f2(x)<<'\n';
}
fout.close();
}