记录编号 75882 评测结果 AAAAAAAAAA
题目名称 [NOIP 2011]瑞士轮 最终得分 100
用户昵称 Gravatar钨铅 是否通过 通过
代码语言 Pascal 运行时间 0.986 s
提交时间 2013-10-29 15:11:54 内存使用 7.03 MiB
显示代码纯文本
program swiss;
var a,f,v,b,c,wi,fa,aw,af:array[1..200000]of longint;
    i,j,n,r,q,k,t,l:longint;
procedure hb(s,m,n,t:longint);
var i,l,j,k:longint;
begin
k:=s;
i:=s;
j:=n;
while (i<=m)and(j<=t) do begin
                         if (f[i]>f[j])or((f[i]=f[j])and(a[i]<a[j])) then begin b[k]:=f[i]; c[k]:=a[i]; inc(i); end
                                                                     else begin b[k]:=f[j]; c[k]:=a[j]; inc(j); end;
                         inc(k);
                         end;
for l:=i to m do begin b[k]:=f[l]; c[k]:=a[l]; inc(k); end;
for l:=j to n do begin b[k]:=f[l]; c[k]:=a[l]; inc(k); end;
for l:=s to t do begin
                 a[l]:=c[l];
                 f[l]:=b[l];
                 end;
end;
procedure gsort(s,t:longint);
var mid:longint;
begin
if s<t then begin
            mid:=(s+t)div 2;
            gsort(s,mid);
            gsort(mid+1,t);
            hb(s,mid,mid+1,t);
            end;
end;
begin
assign(input,'swiss.in');
assign(output,'swiss.out');
reset(input);
rewrite(output);
read(n,r,q);
n:=n*2;
for i:=1 to n do begin
                 a[i]:=i;
                 read(f[i]);
                 end;
for i:=1 to n do read(v[i]);
gsort(1,n);
for i:=1 to r do begin
                 j:=-1;
                 k:=0;
                 repeat
                 j:=j+2;
                 if v[a[j]]>v[a[j+1]] then begin
                                           f[j]:=f[j]+1;
                                           k:=k+1;
                                           wi[k]:=f[j];
                                           aw[k]:=a[j];
                                           fa[k]:=f[j+1];
                                           af[k]:=a[j+1];
                                           end
                                      else begin
                                           f[j+1]:=f[j+1]+1;
                                           k:=k+1;
                                           wi[k]:=f[j+1];
                                           aw[k]:=a[j+1];
                                           fa[k]:=f[j];
                                           af[k]:=a[j];
                                           end;
                 until j+1=n;
                 j:=1;
                 k:=1;
                 t:=1;
                 while (j<(n div 2))and(k<(n div 2)) do begin
                                                        if (wi[k]>fa[j])or((wi[k]=fa[j])and(aw[k]<af[j])) then begin f[t]:=wi[k]; a[t]:=aw[k]; inc(k); end
                                                                                                          else begin f[t]:=fa[j]; a[t]:=af[j]; inc(j); end;
                                                        inc(t);
                                                        end;
                 for l:=k to (n div 2) do begin f[t]:=wi[l]; a[t]:=aw[l]; inc(t); end;
                 for l:=j to (n div 2) do begin f[t]:=fa[l]; a[t]:=af[l]; inc(t); end;
                 end;
write(a[q]);
close(input);
close(output);
end.