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 <algorithm>
#include <iostream>
#include <set>
#include <vector>
#include <utility>
using namespace std;
int main(){
  int N;
  cin >> N;
  vector<pair<int,int> > A;
  int a;
  for(int i = 0; i < N; ++i){
    cin >> a;
    A.push_back(make_pair(a,i));
  }
  sort(A.begin(),A.end());
  set<int> s;
  s.insert(-1);
  s.insert(N);
  long long int ans = 0LL;
  for(int i = 0; i < N; ++i){
    int id = A[i].second;
    s.insert(id);
    set<int>::iterator u = s.find(id), l = u;
    ++u;
    --l;
    ans += (long long int)(*u - id)*(id - (*l))*A[i].first;
    s.insert(id);
  }
  cout << ans << endl;
  return 0;
}