Problem:
Score : 400 points

Problem Statement

One day, Snuke was given a permutation of length N, a_1, a_2, ..., a_N, from his friend.

Find the following:

Constraints

1 ≦ N ≦ 200,000

(a_1, a_2, ..., a_N) is a permutation of (1, 2, ..., N).

Input

The input is given from Standard Input in the following format:

N
a_1 a_2 ... a_N

Output

Print the answer.

Note that the answer may not fit into a 32-bit integer.

Sample Input 1

3
2 1 3

Sample Output 1

9

Sample Input 2

4
1 3 2 4

Sample Output 2

19

Sample Input 3

8
5 4 8 1 2 6 7 3

Sample Output 3

85

Solution in Ruby (2.3.3) (judge verdict: Time Limit Exceeded)

N = gets.to_i
A = gets.split.map(&:to_i)

H = Array.new(N)
P = Hash.new

A.each_with_index do |a, i|
  H[i] = N - i
  P[a] = i
end

def dfs(nums, queue, cur)
  l = nums.size
  return 0 if l == 0
  return nums.first if l == 1

  heights = Array.new(l)
  positions = Hash.new

  nums.each_with_index do |n, i|
    heights[i] = l - i
    positions[n] = i
  end

  res = 0

  while cur < N
    a = queue[cur]
    pos = positions[a]
    cur += 1

    next if pos.nil?

    h = heights[pos]
    res += a * h * (pos + 1)

    if pos > 0
      res += dfs(nums[0...pos], queue, cur)
    end

    if pos < l - 1
      res += dfs(nums[(pos + 1)..-1], queue, cur)
    end

    break
  end

  res
end

ans = dfs(A, A.sort, 0)

puts ans