using
System;
using
System.Collections.Generic;
class
GFG {
static
int
maxSubArraySumRepeated(
int
[] arr,
int
N,
int
K)
{
int
sum = 0;
for
(
int
i = 0; i < N; i++)
sum += arr[i];
int
curr = arr[0];
int
ans = arr[0];
if
(K == 1) {
for
(
int
i = 1; i < N; i++) {
curr = Math.Max(arr[i], curr + arr[i]);
ans = Math.Max(ans, curr);
}
return
ans;
}
List<
int
> V =
new
List<
int
>();
for
(
int
i = 0; i < 2 * N; i++) {
V.Add(arr[i % N]);
}
int
maxSuf = V[0];
int
maxPref = V[2 * N - 1];
curr = V[0];
for
(
int
i = 1; i < 2 * N; i++) {
curr += V[i];
maxPref = Math.Max(maxPref, curr);
}
curr = V[2 * N - 1];
for
(
int
i = 2 * N - 2; i >= 0; i--) {
curr += V[i];
maxSuf = Math.Max(maxSuf, curr);
}
curr = V[0];
for
(
int
i = 1; i < 2 * N; i++) {
curr = Math.Max(V[i], curr + V[i]);
ans = Math.Max(ans, curr);
}
if
(sum > 0) {
int
temp = sum * (K - 2);
ans = Math.Max(ans, Math.Max(temp + maxPref,
temp + maxSuf));
}
return
ans;
}
public
static
void
Main()
{
int
[] arr = { 10, 20, -30, -1, 40 };
int
N = arr.Length;
int
K = 10;
Console.WriteLine(
maxSubArraySumRepeated(arr, N, K));
}
}