Pagini recente » Cod sursa (job #10001) | Cod sursa (job #1986583)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100000];
int zero(int s, int d, int x)
{
int mij, poz = -1;
bool ok = 0;
while((s <= d) && (!ok))
{
mij = s + (d-s)/2;
if(x == v[mij])
{
poz = mij;
ok = 1;
}
else if(x < v[mij])
d = mij - 1;
else
s = mij + 1;
}
while(v[poz] == x)
poz++;
return (poz - 1);
}
int unu(int s, int d, int x)
{
int mij, poz = -1;
bool ok = 0;
while((s <= d) && (!ok))
{
mij = s + (d - s)/2;
if(x <= v[mij])
{
poz = mij;
ok = 1;
}
else
s = mij + 1;
}
while(v[poz] == x)
poz++;
return (poz - 1);
}
int doi(int s, int d, int x)
{
int mij, poz = -1;
bool ok = 0;
while((s <= d) && (!ok))
{
mij = s + (d - s)/2;
if(v[mij] == x)
{
ok = 1;
poz = mij;
}
else
if(x < v[mij])
d = mij - 1;
else
s = mij + 1;
}
while(v[poz] == x)
poz--;
return (poz + 1);
}
int main()
{
int n, m, i, x, intreb, d, s;
f >> n;
for(i = 1; i <= n; i++)
f >> v[i];
f >> m;
for(i = 0; i < m; i++)
{
f >> intreb >> x;
if(intreb == 0)
g << zero(1, n, x) << '\n';
else if(intreb == 1)
g << unu(1, n, x) << '\n';
else
g << doi(1, n, x) << '\n';
}
return 0;
}