Pagini recente » Cod sursa (job #3285462) | Cod sursa (job #3173012) | Cod sursa (job #3230399) | Cod sursa (job #3260222) | Cod sursa (job #247222)
Cod sursa(job #247222)
// Arhiva educationala - Cautare Binara
//
// mi = lo + (hi-lo) div 2
// in loc de
// mi = (lo + hi) div 2
var n,m,t,x,i : longint;
v : array [1..100000] of longint;
f,g : text;
function liCBinExist (x, lo, hi : longint) : longint;
var mi : longint;
begin
while (lo <= hi) do
begin
mi := lo + (hi - lo) div 2;
if (v[mi]=x) then
begin
liCBinExist := mi;
exit;
end
else
if (x > v[mi]) then lo := mi+1
else hi := mi-1;
end;
liCBinExist := -1;
end;
function liCBinLower (x, lo, hi : longint) : longint;
var mi : longint;
begin
while (lo <= hi) do
begin
mi := lo + (hi - lo) div 2;
if (v[mi]=x) then
begin
liCBinLower := mi;
exit;
end
else
if (x > v[mi]) then lo := mi+1
else hi := mi-1;
end;
liCBinLower := lo-1;
end;
function liCBinGreat (x, lo, hi : longint) : longint;
var mi : longint;
begin
while (lo <= hi) do
begin
mi := lo + (hi - lo) div 2;
if (v[mi]=x) then
begin
liCBinGreat := mi;
exit;
end
else
if (x > v[mi]) then lo := mi+1
else hi := mi-1;
end;
liCBinGreat := hi+1;
end;
begin
assign (f, 'cautbin.in');
assign (g, 'cautbin.out');
reset (f);
rewrite (g);
readln (f, n);
for i:=1 to n do
read(f, v[i]);
readln (f);
readln (f, m);
for i:=1 to m do
begin
readln(f, t, x);
case t of
0: writeln (g, liCBinExist(x, 1, n));
1: writeln (g, liCBinLower(x, 1, n));
2: writeln (g, liCBinGreat(x, 1, n));
end;
end;
close (f);
close (g);
end.