题二 朋友
( friend. .* * )
【问题描述】
mxy 即将前往新世界。
在前往新世界的过程中,ta 遇见了两种人。一种是只和 lowb 做朋友,即当且仅当自己的能力值大于对方时他们会成为朋友,另一种是大神我们做朋友,即当且仅当自己的能力
值小于对方时他们会成为朋友。
现在告诉你两种人的能力值。请你计算一共有多少对友好关系。
【输入】
每组测试数据有三行。
第一行有两个整数 m,n(1 <= m,n <= 20000),分别代表前者人数和后者人数。
第二行 m 个数,第三行 n 个数,代表各自的能力值。
【输出】
一行一个整数,表示有多少对友好关系。
【输入输出样例】
friend.in
5 3
8 1 7 3 1
3 6 1
friend.out
7
var
n,m,ans,k,i:longint;
a,b:array[0..20000]of longint;
procedure sort(l,r:longint);
var
i,j,mid:longint;
begin
if l>=r then exit;
i:=l; j:=r; mid:=b[(l+r) div 2];
repeat
while b[i]<mid do inc(i);
while b[j]>mid do dec(j);
if i<=j then
begin
b[0]:=b[i];
b[i]:=b[j];
b[j]:=b[0];
inc(i);
dec(j);
end;
until i>j;
sort(i,r);
sort(l,j);
end;
function find(x:longint):longint;
var
l,r,mid,tmp:longint;
begin
l:=1; r:=m; mid:=0; tmp:=0;
while l<=r do
begin
mid:=(l+r) div 2;
if b[mid]<x then begin tmp:=mid; l:=mid+1 end
else r:=mid-1;
end;
find:=tmp;
end;
begin
assign(input,'friend.in'); reset(input);
assign(output,'friend.out'); rewrite(output);
readln(n,m);
for i:=1 to n do read(a[i]);
readln;
for i:=1 to m do read(b[i]);
sort(1,m);
ans:=0;
for i:=1 to n do
ans:=ans+find(a[i]);
write(ans);
close(input);
close(output);
end.