Pagini recente » Borderou de evaluare (job #1796352) | Cod sursa (job #3274653) | Borderou de evaluare (job #2013710) | Borderou de evaluare (job #2510319) | Cod sursa (job #1051802)
#include <iostream>
#include <fstream>
std::ifstream fin("cautbin.in");
std::ofstream fout("cautbin.out");
int vec[100001], n, m, poz1;
int binSearch(int in, int sf, int val)
{
int m;
while(in < sf)
{
m = in / 2 + sf / 2;
if(vec[m] <= val)
{
in = m+1;
}
else
{
sf = m-1;
}
}
m = in / 2 + sf / 2;
if(vec[m] > val)
{
m--;
}
poz1 = m;
// if(val == vec[m])
{
return m;
}
// return -1;
}
void rezolvare(int x, int y)
{
int raspuns = -1;
if(x == 0)
{
int val = binSearch(0, n-1, y);
if(vec[val] == y)
{
int i = val;
while(i < n && vec[i] == y)
{
i++;
}
raspuns = i;
// fout<<i<<'\n';///il las i, pentru ca trebuie sa afisez pozitia + 1
}
}
else
if(x == 1)
{
int val = binSearch(0, n-1, y);
// if(vec[val] == y)
{
int i = val;
while(i < n && vec[i] <= y)
{
i++;
}
raspuns = i;
// fout<<i<<'\n';///il las i, pentru ca trebuie sa afisez pozitia + 1
}
// else
// {
// int i = val;
// while(i >= 0 && y < vec[i])
// {
// i--;
// }
// raspuns = i + 1;
//// fout<<i + 1<<'\n';
// }
}
else
if(x == 2)
{
int val = binSearch(0, n-1, y);
// if(vec[val] == y)
{
int i = val;
while(i >= 0 && vec[i] >= y)
{
i--;
}
raspuns = i + 2;
// fout<<i + 2<<'\n';///il las i, pentru ca trebuie sa afisez pozitia + 1
}
// else
// {
// int i = poz1;
// while(i < n && y > vec[i])
// {
// i++;
// }
// raspuns = i + 1;
// fout<<i + 1<<'\n';
// }
}
fout<<raspuns<<'\n';
}
void citire()
{
fin>>n;
for(int i = 0; i < n; i++)
{
fin>>vec[i];
}
fin>>m;
int x, y;
for(int i = 0; i < m; i++)
{
fin>>x>>y;
rezolvare(x, y);
}
}
void rezolvare()
{
// fout<<binSearch(0, n-1, 5) + 1;
}
int main()
{
citire();
rezolvare();
return 0;
}