Pagini recente » Cod sursa (job #2632432) | Cod sursa (job #2778339) | Cod sursa (job #1358030) | Cod sursa (job #1048632) | Cod sursa (job #3222486)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int cautare0(int v[], int n, int y)
{
int st = 1, dr = n, pos = -1, mij;
while(st <= dr)
{
mij = (st + dr) / 2;
if (v[mij] == y)
{
st = mij + 1;
pos = mij;
}
else
if (v[mij] > y)
dr = mij - 1;
else
st = mij + 1;
}
return pos;
}
int cautare1(int v[], int n, int y)
{
int st = 1, dr = n, mij, pos;
if (cautare0(v, n, y) != - 1)
return cautare0(v, n, y);
while (st <= dr)
{
mij = (st + dr) / 2;
if (v[mij] > y)
dr = mij - 1;
else
if (v[mij] <= y)
{
st = mij + 1;
pos = mij;
}
}
return pos;
}
int cautare2(int v[], int n, int y)
{
int st = 1, dr = n, mij, pos;
while (st <= dr)
{
mij = (st + dr) / 2;
if (v[mij] < y)
st = mij + 1;
else
if (v[mij] >= y)
{
dr = mij - 1;
pos = mij;
}
}
return pos;
}
int main()
{
int N, M, x, y;
fin >> N;
int v[N + 1];
for (int i = 1; i <= N; i ++)
fin >> v[i];
fin >> M;
for (int i = 1; i <= M; i ++)
{
fin >> x >> y;
if (x == 0)
fout << cautare0(v, N, y) << '\n';
else
if (x == 1)
fout << cautare1(v, N, y) << '\n';
else
fout << cautare2(v, N, y) << '\n';
}
return 0;
}