Pagini recente » Cod sursa (job #1132150) | Cod sursa (job #1587696) | Cod sursa (job #1109515) | Cod sursa (job #2700502) | Cod sursa (job #1354229)
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
#define N 100003
int v[N], n, T, tip, x, logN;
int cb0(int key)
{
int i;
for(int lg = logN,i=0; lg; lg>>=1)
if(i+lg<=n && v[i+lg]<=key)
i += lg;
return v[i]==key ? i:-1;
}
int cb1(int key)
{
int i;
for(int lg = logN,i=0; lg; lg>>=1)
if(i+lg<=n && v[i+lg]<=key)
i += lg;
return i;
}
int cb2(int key)
{
int i;
for(int lg = logN,i=n; lg; lg>>=1)
if(i-lg>0 && v[i-lg]>=key)
i -= lg;
return i;
}
void citire()
{
in >> n;
for(int i=1;i<=n;i++)
in >> v[i];
in >> T;
for(int logN=1;logN<n;logN<<=1);
while(T--)
{
in >> tip >> x;
switch(tip)
{
case 0 : {out << cb0(x) << "\n";break;}
case 1 : {out << cb1(x) << "\n";break;}
case 2 : {out << cb2(x) << "\n";break;}
}
}
}
int main()
{
citire();
in.close();
out.close();
return 0;
}