Cod sursa(job #2735314)
Utilizator | Data | 2 aprilie 2021 11:28:10 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.99 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, m, s[100001], i, q, st, dr, z, poz, t;
int main()
{
fin >> n;
for (i = 1; i <= n; i++)
fin >> s[i];
fin >> m;
for (i = 1; i <= m; i++)
{
fin >> t >> q;
st = 1; dr = n; poz = 0;
if (t == 0)
{
while (st <= dr && poz == 0)
{
z = st + (dr-st)/2;
if (s[z] == q && s[z+1] != q)
{
poz = z;
break;
}
else
{
if (s[z] <= q)
st = z+1;
else
dr = z-1;
}
}
if (poz == 0)
fout << -1 << "\n";
else
fout << poz << "\n";
}
else if (t == 1)
{
while (st <= dr && poz == 0)
{
z = st + (dr-st)/2;
if (s[z] <= q && (s[z+1] > q || (z+1 > n)))
{
poz = z;
break;
}
else
{
if (s[z] <= q)
st = z+1;
else
dr = z-1;
}
}
fout << poz << "\n";
}
else if (t == 2)
{
while (st <= dr && poz == 0)
{
z = st + (dr-st)/2;
if (s[z] >= q && s[z-1] < q)
{
poz = z;
break;
}
else
{
if (s[z] < q)
st = z+1;
else
dr = z;
}
}
fout << poz << "\n";
}
}
return 0;
}