Pagini recente » Cod sursa (job #1508043) | Cod sursa (job #649439) | Cod sursa (job #2899469) | Cod sursa (job #1423930) | Cod sursa (job #2076720)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
#define lim 100010
int t,a,b,n,ini[lim];
/// returneaza cea mai mare poz pe care e x in sir sau -1 daca nu e
int sol0 (int x)
{
int mask, pos=0;
for (mask=1; mask<n; mask<<=1);
for (; mask; mask>>=1)
if (pos+mask<=n)
if (ini[pos+mask]<=x)
pos+=mask;
if (ini[pos]==x) return pos;
return -1;
}
/// returneaza cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau egala cu x in sir
int sol1 (int x)
{
int mask, pos=0;
for (mask=1; mask<n; mask<<=1);
for (; mask; mask>>=1)
if (pos+mask<=n)
if (ini[pos+mask]<=x)
pos+=mask;
return pos;
}
/// returneaza cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala cu x in sir
int sol2 (int x)
{
int mask, pos=0;
for (mask=1; mask<n; mask<<=1);
for (pos=n; mask; mask>>=1)
if (pos-mask>=0)
if (ini[pos-mask]>=x)
pos-=mask;
return pos;
}
int main()
{
fin>>n;
for (int i=1; i<=n; i++)
fin>>ini[i];
fin>>t;
while (t--)
{
fin>>a>>b;
if (a==0)
fout<<sol0(b)<<'\n';
if (a==1)
fout<<sol1(b)<<'\n';
if (a==2)
fout<<sol2(b)<<'\n';
}
return 0;
}