Guest User

Untitled

a guest
Feb 19th, 2018
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.09 KB | None | 0 0
  1. {$APPTYPE CONSOLE}
  2.  
  3. var
  4.   i, n, m: integer;
  5.   heap, a: array[1..100000] of integer;
  6.   ans: int64;
  7.  
  8. procedure Swap(var a, b: integer);
  9. var
  10.   c: integer;
  11. begin
  12.   c := a;
  13.   a := b;
  14.   b := c;
  15. end;
  16.  
  17. procedure SiftUp(num: integer);
  18. begin
  19.   if num = 1 then exit;
  20.   if heap[num] > heap[num div 2] then begin
  21.     Swap(heap[num], heap[num div 2]);
  22.     SiftUp(num div 2);
  23.   end;
  24. end;
  25.  
  26. procedure Add(num: integer);
  27. begin
  28.   heap[num] := a[num];
  29.   SiftUp(num);
  30. end;
  31.  
  32. procedure SiftDown(num: integer);
  33. var
  34.   k: integer;
  35. begin
  36.   if num * 2 > n then exit;
  37.   if (num * 2) + 1 > n then
  38.     k := num * 2
  39.   else begin
  40.     if heap[num * 2] < heap[(num * 2) + 1] then
  41.       k := (num * 2) + 1 else k := num * 2;
  42.   end;
  43.   if heap[num] < heap[k] then begin
  44.     Swap(heap[num], heap[k]);
  45.     SiftDown(k);
  46.   end;
  47. end;
  48.  
  49. begin
  50.   Reset(input, 'input.txt');
  51.   Rewrite(output, 'output.txt');
  52.   Read(n, m);
  53.   ans := 0;
  54.   For i := 1 to n do begin
  55.     Read(a[i]);
  56.     Add(i);
  57.     ans := ans + a[i];
  58.   end;
  59.   For i := 1 to m do begin
  60.     ans := ans - heap[1] + (heap[1] div 10);
  61.     heap[1] := heap[1] div 10;
  62.     SiftDown(1);
  63.   end;
  64.   Write(ans);
  65. end.
Add Comment
Please, Sign In to add comment