Pagini recente » Cod sursa (job #372637) | Cod sursa (job #1758162) | Cod sursa (job #537912) | Cod sursa (job #2270904) | Cod sursa (job #2100478)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int NMAX = 100000 + 5;
int n, m;
int v[NMAX];
int bs0(int x)
{
int st = 1, dr = n, mijl, ans;
while (st <= dr)
{
mijl = (st + dr) / 2;
if (v[mijl] <= x)
{
st = mijl + 1;
ans = mijl;
}
else
dr = mijl - 1;
}
if (v[ans] == x)
return ans;
return -1;
}
int bs1(int x)
{
int st = 1, dr = n, mijl, ans;
while (st <= dr)
{
mijl = (st + dr) / 2;
if (v[mijl] <= x)
{
st = mijl + 1;
ans = mijl;
}
else
dr = mijl - 1;
}
return ans;
}
int bs2(int x)
{
int st = 1, dr = n, mijl, ans;
while (st <= dr)
{
mijl = (st + dr) / 2;
if (v[mijl] >= x)
{
dr = mijl - 1;
ans = mijl;
}
else
st = mijl + 1;
}
return ans;
}
void read()
{
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> v[i];
fin >> m;
}
int main()
{
int cod, x;
read();
while (m--)
{
fin >> cod >> x;
switch (cod)
{
case 0:
fout << bs0(x) << '\n';
break;
case 1:
fout << bs1(x) << '\n';
break;
case 2:
fout << bs2(x) << '\n';
break;
}
}
return 0;
}