Pagini recente » Cod sursa (job #1694609) | Cod sursa (job #629145) | Cod sursa (job #1225639) | Cod sursa (job #1104737) | Cod sursa (job #2483128)
#include<fstream>
#include<iostream>
#define MAX 100005
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int a[MAX], n, m, t, val;
int cautareBinara(int &lastPos)
{
unsigned long long st = 0, dr = n, mid;
lastPos = 0;
while (st <= dr)
{
mid = st + (dr - st) / 2;
if (val == a[mid])
{
return mid;
}
if (val > a[mid])
{
st = mid + 1;
}
else
{
dr = mid - 1;
}
lastPos = mid;
}
return -1;
}
int main()
{
int tmp,lastPos;
f >> n;
for (int i = 0; i < n; ++i)
{
f >> a[i];
}
f >> m;
for (int i = 0; i < m; ++i)
{
f >> t >> val;
tmp = cautareBinara(lastPos);
if (val == 25)
cout << tmp<<' ' << lastPos;
if (t == 0)
{
if (tmp == -1)
{
g << -1 << '\n';
continue;
}
while (tmp < n && a[tmp] == val)
tmp++;
g << tmp <<'\n';
}
else if (t == 1)
{
if (tmp == -1)
{
while (lastPos > 0 && lastPos < n && a[lastPos] > val)
{
lastPos--;
}
if (lastPos == n)
lastPos -= 1;
g << lastPos + 1 << '\n';
continue;
}
while (tmp < n && a[tmp] == val)
tmp++;
g << tmp << '\n';
}
else
{
if (tmp == -1)
{
while (lastPos < n && a[lastPos] < val)
{
lastPos++;
}
if (lastPos == n)
lastPos -= 1;
g << lastPos + 1 << '\n';
continue;
}
while (tmp >= 0 && tmp < n && a[tmp] == val)
tmp--;
if (tmp == n)
g << tmp;
else
g << tmp + 2 << '\n';
}
}
return 0;
}