Cod sursa(job #1521879)
Utilizator | Data | 10 noiembrie 2015 22:09:17 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.92 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
#define MAX 100010
#define cout fout
int a[MAX], n, i, m, t, x, ok, st, dr;
int main()
{
fin >> n;
for(i = 1 ; i <= n ; i++)
fin >> a[i];
fin >> m;
while(m--)
{
fin >> t >> x;
if(t == 0)
{
st = 1;
dr = n;
ok = 0;
while(st <= dr)
{
int mij = (st + dr) >> 1;
//cout << mij << " " << a[mij] << " " << x << "\n";
if(a[mij] == x)
{
ok = mij;
st = mij + 1;
}
else if(a[mij] < x)
{
st = mij + 1;
}
else
{
dr = mij - 1;
}
}
if(!ok)
ok = -1;
cout << ok << "\n";
}
else if(t == 1)
{
st = 1;
dr = n;
ok = 0;
while(st <= dr)
{
int mij = (st + dr) >> 1;
if(a[mij] <= x)
{
ok = mij;
st = mij + 1;
}
else
{
dr = mij - 1;
}
}
cout << ok << "\n";
}
else
{
st = 1;
dr = n;
ok = 0;
while(st <= dr)
{
int mij = (st + dr) >> 1;
if(a[mij] >= x)
{
ok = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
cout << ok << "\n";
}
}
}