Pagini recente » Cod sursa (job #1808432) | Cod sursa (job #2674756) | Cod sursa (job #2625240) | Cod sursa (job #1478306) | Cod sursa (job #1886252)
#include <fstream>
using namespace std;
ifstream fin("cbin.in");
ofstream fout("cbin.out");
const int NMax = 100005;
int N,M;
int X[NMax];
void Read()
{
fin >> N;
for(int i = 1; i <= N; ++i)
fin >> X[i];
}
int BSearch1(int Value)
{
int Left = 1, Right = N;
int Sol = -1;
while(Left <= Right)
{
int Mid = (Left + Right) / 2;
if(X[Mid] == Value)
{
Sol = Mid;
Left = Mid + 1;
}
else
if(X[Mid] < Value)
{
Right = Mid - 1;
}
else
{
Left = Mid + 1;
}
}
return Sol;
}
int BSearch2(int Value)
{
int Left = 1, Right = N;
int Sol = -1;
while(Left <= Right)
{
int Mid = (Left + Right) / 2;
if(X[Mid] <= Value)
{
Sol = Mid;
Left = Mid + 1;
}
else
Right = Mid - 1;
}
return Sol;
}
int BSearch3(int Value)
{
int Left = 1, Right = N;
int Sol = -1;
while(Left <= Right)
{
int Mid = (Left + Right) / 2;
if(X[Mid] >= Value)
{
Sol = Mid;
Right = Mid - 1;
}
else
Left = Mid + 1;
}
return Sol;
}
void SolveandPrint()
{
fin >> M;
while(M--)
{
int op,x;
fin >> op >> x;
if(op == 0)
fout << BSearch1(x)<< "\n";
if(op == 1)
fout << BSearch2(x)<< "\n";
if(op == 2)
fout << BSearch3(x)<< "\n";
}
}
int main()
{
Read();
SolveandPrint();
return 0;
}