Problem:
Score : 600 points

Problem Statement

There are N cities in Republic of AtCoder. The size of the i-th city is A_{i}.
Takahashi would like to build N-1 bidirectional roads connecting two cities so that any city can be reached from any other city by using these roads.

Assume that the cost of building a road connecting the i-th city and the j-th city is |i-j| \times D + A_{i} + A_{j}.
For Takahashi, find the minimum possible total cost to achieve the objective.

Constraints

1 \leq N \leq 2 \times 10^5

1 \leq D \leq 10^9

1 \leq A_{i} \leq 10^9

A_{i} and D are integers.

Input

Input is given from Standard Input in the following format:

N D
A_1 A_2 ... A_N

Output

Print the minimum possible total cost.

Sample Input 1

3 1
1 100 1

Sample Output 1

106

This cost can be achieved by, for example, building roads connecting City 1, 2 and City 1, 3.

Sample Input 2

3 1000
1 100 1

Sample Output 2

2202

Sample Input 3

6 14
25 171 7 1 17 162

Sample Output 3

497

Sample Input 4

12 5
43 94 27 3 69 99 56 25 8 15 46 8

Sample Output 4

658

Solution in C (GCC 5.4.1) (judge verdict: Time Limit Exceeded)

#include<stdio.h>

#define MAX 9223372036854775807

int nextInt();

long long int min(long long int a, long long int b){return a>b?b:a;}
long long int dif(int a, int b){return a<b?b-a:a-b;}

int N, D, A[200000], v, u, i;
long long int mincost[200000], ans;
char used[200000];

long long int cost(int v, int u){
	return dif(v, u)*D+A[v]+A[u];
}

int main(){
	N=nextInt();
	D=nextInt();
	for(i=0; i<N; i++){
		A[i]=nextInt();
		mincost[i]=MAX;
		used[i]=0;
	}
	mincost[0]=0;
	while(1){
		v=-1;
		for(u=0; u<N; u++){
			if(!used[u] && (v==-1 || mincost[u]<mincost[v])){v=u;}
		}
		if(v==-1){break;}
		used[v]=1;
		ans+=mincost[v];
		for(u=0; u<N; u++){
			mincost[u] = min(mincost[u], cost(u, v));
		}
	}

	printf("%lld\n", ans);
	return 0;
}

int nextInt(){
	int f=0; char c=getchar();
	while((c<'0')||('9'<c)){c=getchar();}
	while((c>='0')&&(c<='9')){f=f*10+(c-'0'); c=getchar();}
	return f;
}