Cod sursa(job #2735282)
Utilizator | Data | 2 aprilie 2021 10:41:51 | |
---|---|---|---|
Problema | Cautare binara | Scor | 40 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 2.13 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)/2;
if (s[z] == q)
{
poz = z;
break;
}
else
{
if (s[z] > q)
dr = z-1;
else
st = z+1;
}
}
if (poz == 0)
fout << -1 << "\n";
else
{
while(s[poz] == q)
poz++;
fout << poz-1 << "\n";
}
}
else if (t == 1)
{
while (st <= dr && poz == 0)
{
z = (st+dr)/2;
if (s[z] <= q)
{
poz = z;
break;
}
else
{
if (s[z] > q)
dr = z-1;
else
st = z+1;
}
}
while(s[poz] <= q)
poz++;
fout << poz-1 << "\n";
}
else if (t == 2)
{
while (st <= dr && poz == 0)
{
z = (st+dr)/2;
if (s[z] >= q)
{
poz = z;
break;
}
else
{
if (s[z] > q)
dr = z-1;
else
st = z+1;
}
}
while(s[poz] >= q)
poz--;
fout << poz+1 << "\n";
}
}
return 0;
}