二分查找的上下界

如果数组中有多个元素是我们要找的元素v,我们要返回这个数出现位置的上下界,或者没找到该数要返回能插入此数的位置,这就是二分查找的上下界问题

 1 var
 2   n,i,j,k,l,r,m:longint;
 3   a:array[1..10000] of longint;
 4 function find_high(k:longint):longint;
 5   begin
 6     l:=1;r:=n;
 7     while l<=r do begin
 8       m:=(l+r) shr 1;
 9       if a[m]>k then r:=m-1 else l:=m+1;
10     end;
11     exit(l-1);
12   end;
13 function find_low(k:longint):longint;
14   begin
15     l:=1;r:=n;
16     while l<=r do begin
17       m:=(l+r) shr 1;
18       if a[m]>=k then r:=m-1 else l:=m+1;
19     end;
20     exit(r+1);
21   end;
22 begin
23   readln(n,k);
24   for i:=1 to n do read(a[i]);
25   writeln(find_high(k));
26   writeln(find_low(k));
27 end.
原文地址:https://www.cnblogs.com/vacation/p/5183342.html