Pagini recente » Cod sursa (job #1087990) | Cod sursa (job #1685499) | Cod sursa (job #1623233) | Cod sursa (job #2782078) | Cod sursa (job #1015324)
#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)
{
if(x == 0)
{
int val = binSearch(0, n-1, y);
if(val != -1)
{
int i = val + 1;
while(i < n && vec[i] == y)
{
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(val != -1)
{
int i = val + 1;
while(i < n && vec[i] == y)
{
i++;
}
fout<<i<<'\n';///il las i, pentru ca trebuie sa afisez pozitia + 1
}
else
{
int i = poz1;
while(i >= 0 && y > vec[i])
{
i--;
}
fout<<i + 1<<'\n';
}
}
else
if(x == 2)
{
int val = binSearch(0, n-1, y);
if(val != -1)
{
int i = val - 1;
while(i >= 0 && vec[i] == y)
{
i--;
}
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++;
}
fout<<i + 1<<'\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;
}