using
System;
class
GFG
{
static
int
findMaxValue(
int
[] arr,
int
n)
{
if
(n < 4)
{
Console.WriteLine(
"The array should have"
+
" atleast 4 elements"
);
}
int
[]table1 =
new
int
[n + 1];
int
[]table2 =
new
int
[n];
int
[]table3 =
new
int
[n - 1];
int
[]table4 =
new
int
[n - 2];
fill(table1,
int
.MinValue);
fill(table2,
int
.MinValue);
fill(table3,
int
.MinValue);
fill(table4,
int
.MinValue);
for
(
int
i = n - 1; i >= 0; i--)
{
table1[i] = Math.Max(table1[i + 1], arr[i]);
}
for
(
int
i = n - 2; i >= 0; i--)
{
table2[i] = Math.Max(table2[i + 1],
table1[i + 1] - arr[i]);
}
for
(
int
i = n - 3; i >= 0; i--)
table3[i] = Math.Max(table3[i + 1],
table2[i + 1] + arr[i]);
for
(
int
i = n - 4; i >= 0; i--)
table4[i] = Math.Max(table4[i + 1],
table3[i + 1] - arr[i]);
return
table4[0];
}
static
void
fill(
int
[] arr,
int
val)
{
for
(
int
i = 0; i < arr.Length; i++)
arr[i] = val;
}
public
static
void
Main(String[] args)
{
int
[]arr = { 4, 8, 9, 2, 20 };
int
n = arr.Length;
Console.WriteLine(findMaxValue(arr, n));
}
}