//输入5
//输入1 4 3 2 5
//输出6
//把数组通过增加数字变成先递增后递减或者递增或者递减
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std; 
int main(){    
	int n;    
	cin >> n;
	vector<int> arr(n);
	vector<int> dp(n, 0);
	for(int i=0; i<n; i++)
		cin >> arr[i];
	int pre = arr[0];
	for(int i=1; i<n; i++)
	{       
		// 把数组从 0 到 i  加成递增需要的数量   
		dp[i] = dp[i-1] + max(0, pre - arr[i] + 1); 
		pre = max(pre + 1, arr[i]);  
	}    
	int res = dp.back(), cur = 0;    
	pre = arr.back();   
	for(int i=n-2; i>=0; i--){  
		// 重复加 的部分   
		//比较变成递增和变成递减需要增加的数字哪个小
		int repeat = min(dp[i] - (i==0 ? 0 : dp[i-1]) , max(0, pre - arr[i] + 1));  
		// 把数组从 i 到 n-1 加成递减需要的数量    
		cur += max(0, pre - arr[i] + 1);  
		pre = max(pre + 1, arr[i]);       
		// dp[i] + cur - repeat  这个值为把第 i 个元素变成最大的元素,往左递减,往右递减,需要花费的最小代价    
		// 算出每一个情况,取最小 
		res = min(dp[i] + cur - repeat, res); 
	}  
	cout << res << endl;   
	system("pause");
	return 0;
}