2017.5.21試験問題二友


題二友
( friend. .* * )
【問題の説明】
mxyは新しい世界に向かいます.
新しい世界に向かううちに、taは二人に出会った.一つはlowbとしか友达にならないことです.つまり、自分の能力の値が相手より大きいときだけ友达になります.もう一つは大神です.私たちは友达になります.つまり、自分の能力だけです.
値が相手より小さい場合、彼らは友达になります.
今、二人の能力値を教えてあげます.全部でどれだけの友好関係があるか計算してください.
【入力】
各テストデータは3行あります.
最初の行には2つの整数m,n(1<=m,n<=20000)があり,それぞれ前者の人数と後者の人数を表す.
2行目m個、3行目n個、それぞれの能力値を表す.
【出力】
1行1つの整数で、友好関係がどれだけあるかを表します.
【入出力サンプル】
friend.in
5 3
8 1 7 3 1
3 6 1
friend.out
7
var
 a,b:array[0..20000] of longint;
 m,n,i,j,ans,l,r,mid,t:longint;
procedure qsort(l,r:longint);// 
var
 i,j,key,temp:longint;
begin
 if l>=r then exit;
 i:=l;j:=r;
 key:=b[l+random(r-l+1)];
 repeat
  while (b[i]key) do dec(j);
  if i<=j then
   begin
    temp:=b[i];b[i]:=b[j];b[j]:=temp;
    inc(i);dec(j);
   end;
 until i>j;
 qsort(l,j);
 qsort(i,r);
end;
begin
 readln(m,n);
 for i:=1 to m do read(a[i]);
 for i:=1 to n do read(b[i]);
 qsort(1,n);
 for i:=1 to m do
  begin
   l:=1;r:=n;t:=0;
   while lb[mid] then begin
                          l:=mid+1;
                          t:=mid;// , mid a[i]
                         end
                    else r:=mid-1;
     if (l=r) and (a[i]>b[r]) then inc(t);// l=r( ), 
    end;
   ans:=ans+t;// 
  end;
 writeln(ans);
end.