题解:P12225 [蓝桥杯 2023 国 Java B] 游戏
A7F3jK9pR0xf_ · · 题解
题目传送门
记
考虑每个
那么只需要快速求出 std::multiset 代替了单调队列做滑动窗口,时间复杂度
#include <bits/stdc++.h>
using namespace std;
#define il inline
typedef long long ll;
const int N = 1e5 + 10;
int a[N], n, k;
multiset<int> s;
int main()
{
cin >> n >> k;
for(int i = 1;i <= n;++i) cin >> a[i];
ll s1 = 0, s2 = 0;
for(int i = 1;i < k;++i) s.insert(a[i]);
for(int i = k;i <= n;++i)
{
s.insert(a[i]);
s1 += (*s.begin());
s2 += (*s.rbegin());
s.erase(s.find(a[i - k + 1]));
}
double ans = (s2 - s1) * 1.0 / (n - k + 1);
printf("%.2lf", ans);
return 0;
}