Pagini recente » Cod sursa (job #1889989) | Cod sursa (job #111058) | Cod sursa (job #1716635) | Cod sursa (job #2135158) | Cod sursa (job #1961175)
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 100005;
int n, m;
int sir[N];
int operatie, x;
void citire()
{
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d", &sir[i]);
}
}
int cautareBinara()
{
if(operatie == 0)
{
int poz = (upper_bound(sir, sir + n, x) - 1 - sir);
if(poz >= 0 && poz < n && sir[poz] == x)
{
return poz + 1;
}
else
{
return -1;
}
}
else if(operatie == 1)
{
int poz = (lower_bound(sir, sir + n, x + 1) - 1 - sir);
if(poz >= 0 && poz < n)
{
return poz + 1;
}
else
{
return -1;
}
}
else if(operatie == 2)
{
///!!!!!!!Daca il transform ca pointer nu functineaza!!!! De intrebat la Manu
int poz = (upper_bound(sir, sir + n, x - 1) - sir);
if(poz >= 0 && poz < n)
{
return poz + 1;
}
else
{
return -1;
}
}
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
citire();
scanf("%d", &m);
for(int k = 0; k < m; k++)
{
scanf("%d %d", &operatie, &x);
printf("%d\n", cautareBinara());
}
return 0;
}