Advertisement
Guest User

Untitled

a guest
Nov 5th, 2012
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.38 KB | None | 0 0
  1. {$mode objfpc}
  2. {$R-,Q-,H-,S-,I-}
  3.  
  4. const InputFile = '';
  5. OutputFile = '';
  6. maxN = trunc( 5E5 ) + 10;
  7. maxD = trunc( 1E12 );
  8.  
  9.  
  10. var n , i , j , u , x : integer;
  11. count : integer;
  12. res : int64;
  13. d : array [0 .. maxN] of int64;
  14. prev , next , id : array [0 .. maxN] of integer;
  15. avail : array [0 .. maxN] of boolean;
  16.  
  17.  
  18. procedure Sort( l , h : integer );
  19. var i , j : integer;
  20. pivot : integer;
  21. tmp : integer;
  22. begin
  23. if l >= h then exit;
  24. i := l; j := h;
  25. pivot := d[id[random( h - l + 1 ) + l]];
  26. repeat
  27. while d[id[i]] < pivot do inc( i );
  28. while d[id[j]] > pivot do dec( j );
  29. if i <= j then
  30. begin
  31. tmp := id[i];
  32. id[i] := id[j];
  33. id[j] := tmp;
  34. inc( i ); dec( j );
  35. end;
  36. until i > j;
  37. Sort( l , j ); Sort( i , h );
  38. end;
  39.  
  40.  
  41. begin
  42. assign( input , InputFile ); reset( input );
  43. assign( output , OutputFile ); rewrite( output );
  44. readln( n );
  45. randomize; d[0] := maxD + 1; d[n + 1] := maxD + 1;
  46. for i := 1 to n do
  47. begin
  48. readln( d[i] );
  49. Id[i] := i;
  50. prev[i] := i - 1;
  51. next[i] := i + 1;
  52. end;
  53. Sort( 1 , n );
  54. fillchar( avail , sizeof( avail ) , true );
  55. for x := 1 to n do
  56. if avail[id[x]] then
  57. begin
  58. u := id[x]; count := 1;
  59. i := prev[u]; j := next[u];
  60. while d[i] <= d[u] do
  61. begin
  62. inc( count );
  63. avail[i] := false;
  64. i := prev[i];
  65. end;
  66. while d[j] <= d[u] do
  67. begin
  68. inc( count );
  69. avail[j] := false;
  70. j := next[j];
  71. end;
  72. next[i] := j; prev[j] := i;
  73. if i > 0 then res := res + count;
  74. if j <= n then res := res + count;
  75. res := res + int64( count * ( count - 1 ) ) div 2;
  76. end;
  77. writeln( res );
  78. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement