VM7WC '15 #2 Gold - Uniting the Earth Empire

View as PDF

Submit solution

Time limit:2.0s
Memory limit:64M

Problem type

After the Earth Queen fell, the Earth Kingdom fell into anarchy and was overrun by bandits. Luckily for the citizens of the Earth Kingdom, Kuvira the Great Uniter has brought security to the new Earth Empire and wishes to reconnect the nation by building bridges. She thinks that bridges symbolize power and wealth and will be necessary in rebuilding Republic City.

The Earth Empire consists of N hills in a straight line, with the i^{th} (0 \le i < N) hill having a height of H_i. Kuvira can build a bridge between hill a and hill b (0 \le a < b < N) if and only if both hill a and hill b are greater or equal in height to all other hills in between them.

After losing her smartest engineer and nuking her second smartest engineer, Kuvira has been left engineer-less (and fiance-less). Seeing the opportunity for a big time promotion, you decide to help her count the number of different bridges that she can build between 2 hills!

Hint 1

Use a stack!

Hint 2

Note that each bridge that can be made has a left and a right hill. Consider a right hill i. Then you must count all left hills j with j < i such that you can build a bridge between hills j and i. However, observe that you do not need to consider all the hills between 0 \dots i-1. Consider hills a and b with 0 \le a < b < i such that the height of b is greater than the height of a. Hill a will never be able to act as a left hill for hill i because hill b is "blocking" it. Thus, we will never have to consider hill a as a left hill for all right hills from i onward.

Input Specification

The first line will contain the integer N (2 \le N \le 400\,000).

The next N lines will each contain a single integer, H_i (0 \le H_i < 2^{63})

The heights of the hills will be given in order.

Output Specification

Print a single integer, the number of distinct bridges that can be built between 2 hills.

Sample Input


Sample Output



  • 1
     commented on Sept. 12, 2017

    Any hints on how to improve my solution? Is my idea even correct in the first place?

    • 0
       commented on Sept. 13, 2017 edited

      I'd also try "A Classic problem".

      edit: oops you solved it a second few i posted this comment

    • 2
       commented on Sept. 12, 2017

      I don't think your solution would work even if you optimize. (Time complexity is similar to O(n^2))

      Try using a stack instead for an O(n) time complexity.

      Here is a similar problem that might help you solve this one: https://dmoj.ca/problem/mwc15c2p2