Problem:
Score: 500 points

Problem Statement

Given is a permutation P of \{1, 2, \ldots, N\}.

For a pair (L, R) (1 \le L \lt R \le N), let X_{L, R} be the second largest value among P_L, P_{L+1}, \ldots, P_R.

Find \displaystyle \sum_{L=1}^{N-1} \sum_{R=L+1}^{N} X_{L,R}.

Constraints

2 \le N \le 10^5

1 \le P_i \le N

P_i \neq P_j (i \neq j)

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
P_1 P_2 \ldots P_N

Output

Print \displaystyle \sum_{L=1}^{N-1} \sum_{R=L+1}^{N} X_{L,R}.

Sample Input 1

3
2 3 1

Sample Output 1

5

X_{1, 2} = 2, X_{1, 3} = 2, and X_{2, 3} = 1, so the sum is 2 + 2 + 1 = 5.

Sample Input 2

5
1 2 3 4 5

Sample Output 2

30

Sample Input 3

8
8 2 7 3 4 5 6 1

Sample Output 3

136

Solution in C (Clang 3.8.0) (judge verdict: Wrong Answer)

#include <stdio.h>
int main(){
  int n;
  int ans=0;
  scanf("%d",&n);
  int p[3*n-1],l1[n+1],l2[n+1],r1[n+1],r2[n+1];
  for(int i=n;i<=2*n-1;i++){
    scanf("%d",&p[i]);
    p[i-n]=0;
    p[i+n]=0;
    r1[i-n+1]=2*n-i;
    r2[i-n+1]=2*n-i;
    l1[i-n+1]=i-n+1;
    l2[i-n+1]=i-n+1;
  }
  
  for(int i=n;i<=2*n-1;i++){
    for(int j=1;j<=n-1;j++){
      if(p[i-j]>p[i] && l1[i-n+1]!=i-n+1){
        l2[i-n+1]=j;
        break;
      }
      
      if(p[i-j]>p[i] && l1[i-n+1]==i-n+1){
        l1[i-n+1]=j;
      }
    }
  }
  
  for(int i=n;i<=2*n-1;i++){
    for(int j=1;j<=n-1;j++){
      if(p[i+j]>p[i] && r1[i-n+1]!=2*n-i){
        r2[i-n+1]=j;
        break;
      }
      
      if(p[i+j]>p[i] && r1[i-n+1]==2*n-i){
        r1[i-n+1]=j;
      }
    }
  }
  
  for(int i=1;i<=n;i++){
    ans=ans+p[i+n-1]*((l2[i]-l1[i])*r1[i]+(r2[i]-r1[i])*l1[i]);
  }
  
  printf("%d",ans);
  return 0;
}