Pagini recente » Cod sursa (job #1030560) | Cod sursa (job #3170585)
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.in");
int n, m, v[100000], x;
int sarcina0(int a)
{
int lg = 1;
int poz = 1;
for(lg; lg <= n; lg <<= 1)
if(lg + poz <= n && v[lg + poz] <= a)
{
poz += lg;
}
if(v[poz] == a)
{
return poz;
}
return -1;
}
int sarcina1(int a)
{
int lg = 1;
int poz = 1;
for(lg; lg <= n; lg <<= 1)
if(lg + poz <= n && v[lg + poz] <= a)
{
poz += lg;
}
if(v[poz] == a)
{
return poz;
}
return -1;
}
int sarcina2(int a)
{
int lg = 1;
int poz = n;
for(; lg; lg >>= 1)
if(poz - lg >= 0 && v[poz - lg] >= a)
poz -= lg;
if(v[poz] == a)
{
return poz;
}
return -1;
}
int main()
{
in >> n;
for(int i = 1; i <= n; i++)
{
in >> v[i];
}
in >> m;
for(int k = 1; k <= m; k++)
{
int s;
in >> s;
if(s == 0)
{
in >> x;
out << sarcina0(x) << endl;
}
if(s == 1)
{
in >> x;
out << sarcina1(x) << endl;
}
if(s == 2)
{
in >> x;
out << sarcina2(x) - 2 << endl;
}
}
return 0;
}