fork download
  1. type node=record
  2. vt,ut:longint;
  3. end;
  4. var a:array[0..22000000]of node;
  5. x,i,j,nit,n,k,vt,ut:longint;
  6. fi,fo:text;
  7.  
  8. procedure up(i:longint);
  9. var x,p:longint;
  10. y:node;
  11. begin
  12. x:=a[i].ut;y:=a[i];
  13. repeat
  14. p:=i div 2;
  15. if (p=0)or(a[p].ut<=x)then break;
  16. a[i]:=a[p];
  17. i:=p;
  18. until false;
  19. a[i]:=y;
  20. end;
  21.  
  22. procedure down(i:longint);
  23. var x,c:longint;
  24. y:node;
  25. begin
  26. x:=a[i].ut;y:=a[i];
  27. repeat
  28. c:=i*2;
  29. if (c<nit)and(a[c].ut>a[c+1].ut)then c:=c+1;
  30. if (c>nit)or(a[c].ut>=x)then break;
  31. a[i]:=a[c];
  32. i:=c;
  33. until false;
  34. a[i]:=y;
  35. end;
  36.  
  37. procedure insert(vt,ut:longint);
  38. begin
  39. inc(nit);
  40. a[nit].vt:=vt;
  41. a[nit].ut:=ut;
  42. if nit>1 then up(nit);
  43. end;
  44.  
  45. procedure popn;
  46. var x,y:longint;
  47. begin
  48. dec(nit);
  49. up(nit);
  50. end;
  51.  
  52. procedure pop1;
  53. var i:longint;
  54. begin
  55. a[1]:=a[nit];
  56. dec(nit);
  57. down(1);
  58. end;
  59.  
  60. begin
  61. assign(fi,'heap2.inp');reset(fi);
  62. assign(fo,'heap2.out');rewrite(fo);
  63. while not eof(fi)do
  64. begin
  65. read(fi,k);
  66. if k=3 then
  67. begin
  68. if nit=0 then writeln(fo,'0')else
  69. begin
  70. writeln(fo,a[1].vt);
  71. pop1;
  72. end;
  73. readln(fi);
  74. end
  75. else if k=1 then
  76. begin
  77. readln(fi,vt,ut);
  78. insert(vt,ut);
  79. end
  80. else if k=2 then
  81. begin
  82. if nit=0 then writeln(fo,'0')
  83. else
  84. begin
  85. writeln(fo,a[nit].vt);
  86. popn;
  87. end;
  88. readln(fi);
  89. end
  90. else if k=0 then break;
  91. end;
  92. close(fi);close(fo);
  93. end.
  94.  
  95.  
Runtime error #stdin #stdout 0s 172160KB
stdin
Standard input is empty
stdout
Runtime error 2 at $0804829D
  $0804829D