using
System;
class
GFG
{
class
pair
{
public
int
first, second;
public
pair(
int
first,
int
second)
{
this
.first = first;
this
.second = second;
}
}
static
int
getSubarraySum(
int
[]sum,
int
i,
int
j)
{
if
(i == 0)
return
sum[j];
else
return
(sum[j] - sum[i - 1]);
}
static
void
maximumSumTwoNonOverlappingSubarray(
int
[]arr,
int
N,
int
K)
{
int
[]sum =
new
int
[N];
sum[0] = arr[0];
for
(
int
i = 1; i < N; i++)
sum[i] = sum[i - 1] + arr[i];
pair resIndex =
new
pair(N - 2 * K, N - K);
int
maxSum2Subarray = getSubarraySum(sum, N - 2 * K,
N - K - 1) +
getSubarraySum(sum, N - K, N - 1);
pair secondSubarrayMax =
new
pair(N - K,
getSubarraySum(sum, N - K, N - 1));
for
(
int
i = N - 2 * K - 1; i >= 0; i--)
{
int
cur = getSubarraySum(sum, i + K, i + 2 * K - 1);
if
(cur >= secondSubarrayMax.second)
secondSubarrayMax =
new
pair(i + K, cur);
cur = getSubarraySum(sum, i, i + K - 1) +
secondSubarrayMax.second;
if
(cur >= maxSum2Subarray)
{
maxSum2Subarray = cur;
resIndex =
new
pair(i, secondSubarrayMax.first);
}
}
for
(
int
i = resIndex.first;
i < resIndex.first + K; i++)
Console.Write(arr[i] +
" "
);
Console.WriteLine();
for
(
int
i = resIndex.second;
i < resIndex.second + K; i++)
Console.Write(arr[i] +
" "
);
Console.WriteLine();
}
public
static
void
Main(String[] args)
{
int
[]arr = {2, 5, 1, 2, 7, 3, 0};
int
N = arr.Length;
int
K = 2;
maximumSumTwoNonOverlappingSubarray(arr, N, K);
}
}