Pagini recente » Cod sursa (job #846723) | Cod sursa (job #255522) | Cod sursa (job #2566260) | Cod sursa (job #97558) | Cod sursa (job #604719)
Cod sursa(job #604719)
#include <iostream>
#define NMax 100005
using namespace std;
int Value[NMax], N, M;
int BinarySearch0 (int X)
{
int S=-1, L=1, R=N;
while (L<=R)
{
int Mid=(L+R)/2;
if (Value[Mid]==X)
{
S=Mid;
L=Mid+1;
}
if (Value[Mid]<X)
{
L=Mid+1;
}
if (Value[Mid]>X)
{
R=Mid-1;
}
}
return S;
}
int BinarySearch1 (int X)
{
int S=-1, L=1, R=N;
while (L<=R)
{
int Mid=(L+R)/2;
if (Value[Mid]<=X)
{
S=Mid;
L=Mid+1;
}
if (Value[Mid]<X)
{
L=Mid+1;
}
if (Value[Mid]>X)
{
R=Mid-1;
}
}
return S;
}
int BinarySearch2 (int X)
{
int S=-1, L=1, R=N;
while (L<=R)
{
int Mid=(L+R)/2;
if (Value[Mid]>=X)
{
S=Mid;
R=Mid-1;
}
if (Value[Mid]<X)
{
L=Mid+1;
}
if (Value[Mid]>X)
{
R=Mid-1;
}
}
return S;
}
int main()
{
freopen ("cautbin.in", "r", stdin);
freopen ("cautbin.out", "w", stdout);
scanf ("%d", &N);
for (int i=1; i<=N; ++i)
{
scanf ("%d", &Value[i]);
}
scanf ("%d", &M);
for (; M>0; --M)
{
int Type, X;
scanf ("%d %d", &Type, &X);
if (Type==0)
{
printf ("%d\n", BinarySearch0 (X));
}
if (Type==1)
{
printf ("%d\n", BinarySearch1 (X));
}
if (Type==2)
{
printf ("%d\n", BinarySearch2 (X));
}
}
return 0;
}