| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
求高手指点!Runtime Error!type ab=record x,y:longint; end; var f,q:array[0..300000] of ab; flag:array[0..500] of boolean; tmp,g:ab; n,i,max_r,min_r:longint; procedure swap(var x,y:ab); var tmp:ab; begin tmp:=x; x:=y; y:=tmp; end; procedure insert_max(tmp:ab); var i:longint; begin inc(max_r); q[max_r]:=tmp; i:=max_r; while (i>1) and (q[i].y>q[i shr 1].y) do begin swap(q[i],q[i shr 1]); i:=i shr 1; end; end; procedure insert_min(tmp:ab); var i:longint; begin inc(min_r); f[min_r]:=tmp; i:=min_r; while (i>1) and (f[i].y<f[i shr 1].y) do begin swap(f[i],f[i shr 1]); i:=i shr 1; end; end; procedure change_max(x:longint); var max,l_,r_:longint; begin max:=x; l_:=x shl 1; r_:=l_+1; if (l_<=max_r) and (q[l_].y>q[max].y) then max:=l_; if (r_<=max_r) and (q[r_].y>q[max].y) then max:=r_; if max<>x then begin swap(q[x],q[max]); change_max(max); end; end; procedure change_min(x:longint); var min,l_,r_:longint; begin min:=x; l_:=x shl 1; r_:=l_+1; if (l_<=min_r) and (f[l_].y<f[min].y) then min:=l_; if (r_<=min_r) and (f[r_].y<f[min].y) then min:=r_; if min<>x then begin swap(f[x],f[min]); change_min(min); end; end; function get_max():ab; var res:ab; begin res:=q[1]; q[1]:=q[max_r]; dec(max_r); if max_r>1 then change_max(1); exit(res); end; function get_min():ab; var res:ab; begin res:=f[1]; f[1]:=f[min_r]; dec(min_r); if min_r>1 then change_min(1); exit(res); end; begin fillchar(q,sizeof(q),0); fillchar(f,sizeof(f),0); fillchar(flag,sizeof(flag),true); max_r:=0; min_r:=0; read(n); while n<>0 do begin case n of 1:begin read(tmp.x,tmp.y); flag[tmp.y]:=false; insert_max(tmp); insert_min(tmp); end; 2:begin g:=get_max(); while (g.y<>0) and (flag[g.y]) do g:=get_max(); writeln(g.x); flag[g.y]:=true; if q[1].y=0 then max_r:=0; end; 3:begin g:=get_min(); while (g.y<>0) and (flag[g.y]) do g:=get_min(); writeln(g.x); flag[g.y]:=true; if f[1].y=0 then min_r:=0; end; end; read(n); end; end. Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator