Pagini recente » Cod sursa (job #2931092) | Cod sursa (job #2530076) | Cod sursa (job #2355459) | Cod sursa (job #1767791) | Cod sursa (job #1161938)
#include <fstream>
#define nmax 100000+5
using namespace std;
int v[nmax];
int n, m;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int cautare0(int x)
{
int st = 1, dr = n;
int mijl;
while (st <= dr)
{
m = (st + dr) / 2;
if (v[m] == x)
{
while (m+1 <= n && v[m+1] == x)
m++;
return m;
}
else if (v[m] > x)
st = m;
else
dr = m;
}
return -1;
}
int cautare1(int x)
{
int st = 1, dr = n;
int mijl;
while (st <= dr)
{
m = (st + dr) / 2;
if (v[m] == x)
break;
else if (v[m] > x)
st = m;
else
dr = m;
}
while (m+1 <= n && v[m+1] <= x)
m++;
return m;
}
int cautare2(int x)
{
int st = 1, dr = n;
int mijl;
while (st <= dr)
{
m = (st + dr) / 2;
if (v[m] == x)
break;
else if (v[m] > x)
st = m;
else
dr = m;
}
while (m-1 > 0 && v[m-1] >= x)
m--;
return m;
}
int main()
{
int i, j;
int a, b;
fin >> n;
for (i = 1; i <= n; i++)
fin >> v[i];
fin >> m;
for (j = 1; j <= m; j++)
{
fin >> a >> b;
if (a == 0)
fout << cautare0(b);
else if (a == 1)
fout << cautare1(b);
else if (a == 2)
fout << cautare2(b);
fout << '\n';
}
return 0;
}