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 C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include<bits/stdc++.h>
using namespace std;
#define int long long

signed main()
{
    int n;
    cin>>n;
    int ar[n];
    for(int i=0;i<n;i++)
        cin>>ar[i];
    int nextS[n];
    int preS[n];
    stack<int> s;
    preS[0]=-1;
    s.push(0);
    for(int i=1;i<n;i++)
    {
        while(!s.empty() && ar[i]<=ar[s.top()])
            s.pop();
        if(s.empty())
            preS[i]=-1;
        else
            preS[i]=s.top();
        s.push(i);
    }
    while(!s.empty())
        s.pop();
    nextS[n-1]=n;
    s.push(n-1);
    for(int i=n-2;i>=0;i--)
    {
        while(!s.empty() && ar[i]<ar[s.top()])
            s.pop();
        if(s.empty())
            nextS[i]=n;
        else
            nextS[i]=s.top();
        s.push(i);
    }
    long long ans=0;
    for(int i=0;i<n;i++)
    {
        long long p=(i-preS[i])*ar[i]*(nextS[i]-i);
        ans+=p;
    }
    cout<<ans;
    return 0;
}