using
System;
using
System.Collections.Generic;
class
GFG {
static
int
mod = 1000000007;
static
int
MAX = 100005;
public
static
int
minimumProductSubsequence(
int
[] arr,
int
n,
int
k) {
SortedSet<Tuple<
double
,
long
>> s =
new
SortedSet<Tuple<
double
,
long
>>(
Comparer<Tuple<
double
,
long
>>.Create((a, b) => a.Item1.CompareTo(b.Item1))
);
long
[] dp=
new
long
[MAX];
double
[] p=
new
double
[MAX];
dp[0] = arr[0];
p[0] = Math.Log(arr[0]);
s.Add(Tuple.Create(p[0], dp[0]));
for
(
int
i = 1; i < k; i++) {
double
l = s.Min.Item1;
long
min = s.Min.Item2;
p[i] = Math.Log(arr[i]) + l;
dp[i] = (arr[i] * min) % mod;
s.Add(Tuple.Create(p[i], dp[i]));
}
for
(
int
i = k; i < n; i++) {
double
l = s.Min.Item1;
long
min = s.Min.Item2;
p[i] = Math.Log(arr[i]) + l;
dp[i] = (arr[i] * min) % mod;
s.Remove(Tuple.Create(p[i - k], dp[i - k]));
s.Add(Tuple.Create(p[i], dp[i]));
}
return
(
int
) dp[n - 1];
}
public
static
void
Main(
string
[] args) {
int
[] arr = { 1, 2, 3, 4 };
int
n = arr.Length;
int
k = 2;
Console.WriteLine(minimumProductSubsequence(arr, n, k));
}
}