Advertisement
Guest User

111

a guest
Apr 25th, 2012
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.46 KB | None | 0 0
  1. type
  2.  myset=record
  3.   id,key:longint;
  4.  end;
  5. const
  6.  maxset=100000;
  7.  maxkey=100000;
  8. var
  9.  k:array[1..maxset] of myset;
  10.  n,l,z,q,q1,i,x,xx,a,b,c:longint;
  11.  nom:array[1..maxkey] of longint;
  12.  
  13.  
  14. procedure swap(x,y:longint);
  15. var
  16.  q:myset;
  17. begin
  18.  q:=k[x];
  19.  q1:=nom[k[x].id];
  20.  nom[k[x].id]:=nom[k[y].id];
  21.  nom[k[y].id]:=q1;
  22.  k[x]:=k[y];
  23.  k[y]:=q;
  24. end;
  25.  
  26.  
  27.  
  28. procedure up(po:longint);
  29. var
  30.  i:longint;
  31. begin
  32.  i:=po;
  33.  while i shr 1>0 do
  34.  begin
  35.   if k[i].key<k[i shr 1].key then swap(i,i shr 1) else break;
  36.   i:=i shr 1;
  37.  end;
  38. end;
  39.  
  40.  
  41.  
  42. procedure down(po:longint);
  43. begin
  44.  i:=po;
  45.  while i<l do
  46.  begin
  47.   z:=ord(k[i*2].key>k[i*2+1].key);
  48.   if k[i].key>k[i*2+z].key then swap(i,i*2+z);
  49.   i:=i*2+z;
  50.  end;
  51. end;
  52.  
  53.  
  54.  
  55. procedure insert(id,key:longint);
  56. begin
  57.  inc(l);
  58.  nom[id]:=l;
  59.  k[l].key:=key;
  60.  k[l].id:=id;
  61.  up(l);
  62. end;
  63.  
  64.  
  65.  
  66. procedure delete(id:longint);
  67. var
  68.  xx:longint;
  69. begin
  70.  xx:=nom[id];
  71.  swap(xx,l);
  72.  dec(l);
  73.  up(l);
  74.  down(l);
  75. end;
  76.  
  77.  
  78.  
  79. begin
  80. { assign(input,'input.txt');
  81.  reset(input);
  82.  assign(output,'output.txt');
  83.  rewrite(output);    }
  84.  readln(n);
  85.  for i:=1 to n do
  86.  begin
  87.   read(a);
  88.   {insert,findmin,deletemin,delete,changekey}
  89.   if a=1 then
  90.   begin
  91.    read(b,c);
  92.    {id,key}
  93.    insert(b,c);
  94.   end;
  95.   if a=2 then writeln(k[1].key);
  96.   if a=3 then delete(k[1].id);
  97.   if a=4 then
  98.   begin
  99.    read(b);
  100.    delete(b);
  101.   end;
  102.   if a=5 then
  103.   begin
  104.    read(b,c);
  105.    delete(b);
  106.    insert(b,c);
  107.   end;
  108.   readln;
  109.  end;
  110. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement