Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type
- myset=record
- id,key:longint;
- end;
- const
- maxset=100000;
- maxkey=100000;
- var
- k:array[1..maxset] of myset;
- n,l,z,q,q1,i,x,xx,a,b,c:longint;
- nom:array[1..maxkey] of longint;
- procedure swap(x,y:longint);
- var
- q:myset;
- begin
- q:=k[x];
- q1:=nom[k[x].id];
- nom[k[x].id]:=nom[k[y].id];
- nom[k[y].id]:=q1;
- k[x]:=k[y];
- k[y]:=q;
- end;
- procedure up(po:longint);
- var
- i:longint;
- begin
- i:=po;
- while i shr 1>0 do
- begin
- if k[i].key<k[i shr 1].key then swap(i,i shr 1) else break;
- i:=i shr 1;
- end;
- end;
- procedure down(po:longint);
- begin
- i:=po;
- while i<l do
- begin
- z:=ord(k[i*2].key>k[i*2+1].key);
- if k[i].key>k[i*2+z].key then swap(i,i*2+z);
- i:=i*2+z;
- end;
- end;
- procedure insert(id,key:longint);
- begin
- inc(l);
- nom[id]:=l;
- k[l].key:=key;
- k[l].id:=id;
- up(l);
- end;
- procedure delete(id:longint);
- var
- xx:longint;
- begin
- xx:=nom[id];
- swap(xx,l);
- dec(l);
- up(l);
- down(l);
- end;
- begin
- { assign(input,'input.txt');
- reset(input);
- assign(output,'output.txt');
- rewrite(output); }
- readln(n);
- for i:=1 to n do
- begin
- read(a);
- {insert,findmin,deletemin,delete,changekey}
- if a=1 then
- begin
- read(b,c);
- {id,key}
- insert(b,c);
- end;
- if a=2 then writeln(k[1].key);
- if a=3 then delete(k[1].id);
- if a=4 then
- begin
- read(b);
- delete(b);
- end;
- if a=5 then
- begin
- read(b,c);
- delete(b);
- insert(b,c);
- end;
- readln;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement