Pagini recente » Istoria paginii utilizator/iorgulescu_tiberiu_321ca | Cod sursa (job #788396) | Atasamentele paginii abvcf | Istoria paginii utilizator/dinu_blanovschi | Cod sursa (job #1687364)
#include <fstream>
using namespace std;
const int N = 100001;
const int L = 16;
int v[N], n;
int caut0(int x)
{
int i = 0, pas = 1 << L;
while (pas != 0)
{
//proprietatea este: v[i] <= x
if (i + pas <= n && v[i + pas] <= x)
i += pas;
pas /= 2;
}
if(v[i] != x)
return -1;
return i;
}
int caut1(int x)
{
int i = 0, pas = 1 << L;
while (pas !=0)
{
// proprietatea este: v[i] >= x
if (i + pas <= n && v[i + pas] <= x )
i += pas;
pas /= 2;
}
return i;
}
int caut2(int x)
{
int i = 0, pas = 1 << L;
while (pas !=0)
{
if (i + pas <= n && v[i + pas] < x )
i += pas;
pas /= 2;
}
return 1 + i;
}
int main()
{
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int i, j, tip, x, m;
in >> n;
for (i=1; i<=n; i++)
{
in >> v[i];
}
in >> m;
for(j=1; j<=m; j++)
{
in >> tip >> x;
if (tip == 0)
out << caut0(x) << "\n";
if (tip == 1)
out << caut1(x) << "\n";
if (tip == 2)
out << caut2(x) << "\n";
}
return 0;
}