LeetCode 5704. 好子数组的最大分数
原题链接
困难
作者:
孤独时代的罗永浩
,
2021-03-17 00:53:20
,
所有人可见
,
阅读 336
尝试用了一下RMQ来做, 小数据可以得到正确结果, 但是最后超时了, 具体原因我也不清楚嘿嘿
class Solution {
public:
const static int N = 100010;
int f[N][17];
int len[N];
void init(vector<int>& nums)
{
int n = nums.size();
for (int j = 0; j < 17; j ++ )
for (int i = 1; i + (1 << j) - 1 <= n; i ++ )
if (!j) f[i][j] = nums[i - 1];
else f[i][j] = min(f[i][j - 1], f[i + (1 << j - 1)][j - 1]);
for(int i = 1, j = 1, t = 0; i < N; i ++)
{
while(j <= i) j *= 2, t ++;
len[i] = t - 1;
}
}
int query(int l, int r)
{
int k = len[r - l + 1];
return min(f[l][k], f[r - (1 << k) + 1][k]);
}
int maximumScore(vector<int>& nums, int k) {
init(nums);
long long ans = 0;
for(int j = k; j < nums.size(); j ++)
{
for(int i = 0; i <= k; i ++)
ans = max(ans, (long long)query(i + 1, j + 1) * (j - i + 1));
}
return ans;
}
};