Pagini recente » Cod sursa (job #2343274) | Cod sursa (job #1611508) | Cod sursa (job #913702) | Cod sursa (job #95530) | Cod sursa (job #2544395)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
unsigned n, m;
vector <unsigned> numere;
int caut_bin(unsigned element, unsigned operatie)
{
unsigned st = 0, dr = n - 1, m;
while(st != dr)
{
m = (st + dr)/2;
if(numere[m] < element)
st = m + 1;
else dr = m;
}
if(operatie == 0)
{
if(numere[st] != element)
return -1;
else
{
while(numere[st] == element && st < n)
st++;
return st - 1;
}
}
if(operatie == 1)
{
if(numere[st] == element)
{
while(numere[st] == element && st < n)
st++;
return st - 1;
}
else
{
return st - 1;
}
}
else
{
if(numere[st] == element)
{
while(numere[st] == element && st >= 0)
st--;
return st + 1;
}
else
{
dr = numere[st];
while(numere[st] == dr && st >= 0)
st--;
return st + 1;
}
}
}
int main()
{
unsigned x, i, op;
fin >> n;
for(i = 0; i < n; i++)
fin >> x, numere.push_back(x);
fin >> m;
for(i = 0; i < m; i++)
{
fin >> op >> x;
fout << 1 + caut_bin(x, op) << '\n';
}
return 0;
}