bzoj1034: [ZJOI2008]泡泡堂BNB

来源:互联网 发布:ci 数据库查询 编辑:程序博客网 时间:2024/04/27 20:37

传送门

一群不务正业的省队选手打泡泡堂。

一眼田忌赛马既视感(实际上就是)

我们可以用A队最弱的打B队最弱的,打不过就打最强的,这样可以拿最高分。

A最低时B最高,于是我们把B队也模拟一下设答案为ans,则最低分为2*n-ans。

var  a,b,c,d,aa,bb:array [0..100005] of longint;  n,i:longint;procedure kp1(l,r:longint);  var i,j,m,t:longint;  begin    i:=l; j:=r; m:=a[(l+r) div 2];    while (i<=j) do begin      while (a[i]<m) do inc(i);      while (a[j]>m) do dec(j);      if (i<=j) then begin        t:=a[i]; a[i]:=a[j]; a[j]:=t;        inc(i); dec(j);    end; end;    if (l<j) then kp1(l,j);    if (i<r) then kp1(i,r);  end;procedure kp2(l,r:longint);  var i,j,m,t:longint;  begin    i:=l; j:=r; m:=b[(l+r) div 2];    while (i<=j) do begin      while (b[i]<m) do inc(i);      while (b[j]>m) do dec(j);      if (i<=j) then begin        t:=b[i]; b[i]:=b[j]; b[j]:=t;        inc(i); dec(j);    end; end;    if (l<j) then kp2(l,j);    if (i<r) then kp2(i,r);  end;function calc:longint;  var k,s,i,t1,t2,t:longint;  begin    aa:=a; bb:=b;    fillchar(c,sizeof(c),0);    fillchar(d,sizeof(d),0);    k:=1; t:=0;    s:=0;    for i:=1 to n do begin      while (k<=n) and (a[i]>b[k]) do begin inc(t); b[t]:=b[k]; inc(k); end;      if (t=0) then c[i]:=1 else begin dec(t); inc(s,2); end;    end;    t1:=0;    for i:=1 to n do      if (c[i]=1) then begin inc(t1); a[t1]:=a[i]; end;    for i:=k to n do begin inc(t); b[t]:=b[i]; end;    t2:=t; t:=0; k:=1;    for i:=1 to t1 do begin      while (k<=t2) and (a[i]>=b[k]) do begin inc(t); b[t]:=b[k]; inc(k); end;      if (t<>0) then begin dec(t); inc(s); end;    end;    a:=aa; b:=bb;    exit(s);  end;begin  read(n);  for i:=1 to n do read(a[i]);  for i:=1 to n do read(b[i]);  kp1(1,n);  kp2(1,n);  write(calc,' ');  c:=a; a:=b; b:=c;  write(2*n-calc);end.


2 0
原创粉丝点击