Cod sursa(job #1391014)
| Utilizator | Data | 17 martie 2015 16:01:18 | |
|---|---|---|---|
| Problema | Cautare binara | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.3 kb |
#include <fstream>
using namespace std;
ifstream in ("cautbin.in");
ofstream out ("cautbin.out");
int v[100001], L, n, m, i, x, a;
long long pas;
int main()
{
in >> n;
L=31;
for(i=1; i<=n; i++)
{
in >> v[i];
}
in >> m;
while(m>0)
{
in >> a >> x;
m--;
if(a==2)
{
pas=1LL<<L;
i=0;
while(pas!=0)
{
if(i + pas <= n && v[i+pas]<x)
{
i+=pas;
}
pas/=2;
}
out << i+1 << "\n";
}
if(a==1)
{
pas=1LL<<L;
i=0;
while(pas!=0)
{
if(i + pas <= n && v[i+pas]<=x)
{
i+=pas;
}
pas/=2;
}
out << i << "\n";
}
if(a==0)
{
pas = 1LL << 31;
i=0;
while(pas!=0)
{
if(i + pas <= n && v[i+pas]<=x)
{
i+=pas;
}
pas/=2;
}
if(v[i]==x)
{
out << i << "\n";
}
else
out << -1 << "\n";
}
}
return 0;
}
