Pagini recente » Cod sursa (job #2261278) | Cod sursa (job #2867305) | Cod sursa (job #906215) | Cod sursa (job #2732532) | Cod sursa (job #1051864)
#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 + sf) / 2;
if(vec[m] < val)
{
in = m+1;
}
else
if(vec[m] > val)
{
sf = m-1;
}
else
{
return m;
}
}
m = (in + sf)/2;/// / 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)
{
val++;
// std::cout<<val<<' ';
// fout<<val<<' ';
int i = val;
int j = i;
while(i >= 0 && vec[i] >= y)
{
j = i;
i--;
}
// i++;
// while(i < n && vec[i] >= y)
// {
// j = i;
// i++;
// }
raspuns = j + 1;
if(raspuns > n)
{
raspuns = n;
}
// 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;
}