如果数组中有多个元素是我们要找的元素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.