Pagini recente » Cod sursa (job #1743765) | Cod sursa (job #342561) | Cod sursa (job #951286) | Cod sursa (job #2114172) | Cod sursa (job #1129449)
#include <iostream>
#include <fstream>
using namespace std;
int CautareBinara(int v[100001], int nr, int lo, int hi)
{
if (hi < lo)
return -1;
else
{
int mid =lo + (hi - lo) / 2;
if (v[mid] > nr)
return CautareBinara(v, nr, lo, mid - 1);
else if (v[mid] < nr)
return CautareBinara(v, nr, mid + 1, hi);
else
return mid;
}
}
int MaiMare(int v[100001], int nr, int lo, int hi)
{
int poz = CautareBinara(v, nr, lo, hi);
if (poz == -1)
return -1;
else
{
while (v[poz + 1] == nr)
poz++;
return poz + 1;
}
}
int MaiMic(int v[100001], int nr, int lo, int hi)
{
int poz = CautareBinara(v, nr, lo, hi);
if (poz == -1)
return -1;
else
{
while (v[poz - 1] == nr)
poz--;
return poz + 1;
}
}
int main()
{
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100001];
int n, m, a, b, poz, final;
f >> n;
for (int i = 0; i < n; i++)
f >> v[i];
f >> m;
for (int i = 0; i < m; i++)
{
f >> a >> b;
switch(a)
{
case 0:
g << MaiMare(v, b, 0, n) << '\n';
break;
case 1:
poz = 0; final = 0;
do
{
final = poz;
poz = MaiMare(v, b--, 0, n);
}
while (poz != -1);
g << final << '\n';
break;
case 2:
poz = 0; final = 0;
do
{
final = poz;
poz = MaiMic(v, b++, 0, n);
}
while (poz != -1);
g << final << '\n';
break;
}
}
f.close();
g.close();
return 0;
}