题意:
给你
n
n
n 长度的一个
1
n
1~n
1 n 的序列,将其分为
k
k
k 份,取每份中的最大值相加,输出和的最大值和有多少种分法等于最大值。
取前
k
k
k 大值,储存下标,每两个
k
k
k 大值间有
b
i
−
b
i
−
1
b_i - b_{i-1}
bi−bi−1 种分法,相乘即可。
AC代码:
const int N = 2e5 + 10;
const int mod = 998244353;
ll a[N], pos[N], b[N];
ll ans, cnt;
ll n, m,k;
int main()
{
sldd(n, k);
rep(i, 1, n)
{
sld(a[i]);
pos[a[i]] = i;
}
per(i, n, n - k + 1)
{
ans += i;
b[++m] = pos[i];
}
sort(b + 1, b + 1 + m);
cnt = 1;
rep(i, 2, m)
cnt = cnt * (b[i] - b[i - 1]) % mod;
pldd(ans, cnt);
return 0;
}