#include <bits/stdc++.h>
using
namespace
std;
bool
check(
int
m,
int
n,
int
arr[])
{
int
desired[n];
for
(
int
i = n - 1; i >= 0; i--) {
desired[i] = m;
m--;
}
for
(
int
i = 0; i < n; i++) {
if
(arr[i] > desired[i] || desired[i] < 1) {
return
false
;
}
}
return
true
;
}
int
minOperations(
int
arr[],
int
n)
{
int
start = (
int
)arr[n - 1];
int
end = *(max_element(arr, arr + n)) + n;
int
max_arr = 0;
while
(start <= end) {
int
mid = (start + end) / 2;
if
(check(mid, n, arr)) {
max_arr = mid;
end = mid - 1;
}
else
{
start = mid + 1;
}
}
int
desired[n];
for
(
int
i = n - 1; i >= 0; i--) {
desired[i] = max_arr;
max_arr--;
}
int
operations = 0;
for
(
int
i = 0; i < n; i++) {
operations += (desired[i] - arr[i]);
}
return
operations;
}
int
main()
{
int
arr[] = { 4, 4, 5, 5, 7 };
int
n =
sizeof
(arr) /
sizeof
(arr[0]);
cout << minOperations(arr, n);
return
0;
}