Pagini recente » Cod sursa (job #44342) | Cod sursa (job #570646) | Cod sursa (job #12200) | Cod sursa (job #1902683) | Cod sursa (job #2967493)
#include <fstream>
using namespace std;
const int N = 100000;
int v[N], n;
int caut_0(int x)
{
int st = 0, dr = n - 1, rez = -1;
while (st <= dr)
{
int m = (st + dr) / 2;
if (v[m] <= x)
{
rez = m;
st = m + 1;
}
else
{
dr = m - 1;
}
}
if (rez == -1 || v[rez] < x)
{
return -1;
}
return rez + 1;
}
int caut_1(int x)
{
int st = 0, dr = n - 1, rez = -1;
while (st <= dr)
{
int m = (st + dr) / 2;
if (v[m] <= x)
{
rez = m;
st = m + 1;
}
else
{
dr = m - 1;
}
}
return rez + 1;
}
int caut_2(int x)
{
int st = 0, dr = n - 1, rez = -1;
while (st <= dr)
{
int m = (st + dr) / 2;
if (v[m] >= x)
{
rez = m;
dr = m - 1;
}
else
{
st = m + 1;
}
}
return rez + 1;
}
int main()
{
ifstream in("cautbin.in");
ofstream out("cautbin.out");
in >> n;
for (int i = 0; i < n; i++)
{
in >> v[i];
}
int nq;
in >> nq;
for (int i = 0; i < nq; i++)
{
int tip, val;
in >> tip >> val;
if (tip == 0)
{
out << caut_0(val) << "\n";
}
else if (tip == 1)
{
out << caut_1(val) << "\n";
}
else
{
out << caut_2(val) << "\n";
}
}
in.close();
out.close();
return 0;
}