From 457fd2b64c7132df5f13b5aa145114d8272b94d5 Mon Sep 17 00:00:00 2001 From: hanyixuanten <105723997+hanyixuanten@users.noreply.github.com> Date: Sat, 15 Aug 2026 16:57:28 +0800 Subject: [PATCH] new file: P1404.cpp --- P1404.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 P1404.cpp diff --git a/P1404.cpp b/P1404.cpp new file mode 100644 index 0000000..28b017f --- /dev/null +++ b/P1404.cpp @@ -0,0 +1,34 @@ +// 102 +// https://www.luogu.com.cn/article/42ly2wrn +#include +#define int long long +using namespace std; +int n, l; +int sum[100005]; +int q[100005]; +int t, h; +double calc(int x, int y) +{ + return (0.0 + sum[y] - sum[x]) / (y - x); +} +signed main() +{ + scanf("%lld%lld", &n, &l); + for (int i = 1, x; i <= n; ++i) + scanf("%lld", &x), sum[i] = sum[i - 1] + x; + double ans = 0; + for (int i = l; i <= n; ++i) // lp + { + while (t - h >= 2 && calc(i - l, q[t - 1]) < calc(i - l, q[t - 2])) + t--; + q[t++] = i - l; + while (t - h >= 2 && calc(i, q[h]) < calc(i, q[h + 1])) + h++; + ans = max(ans, calc(i, q[h])); + } + printf("%lld\n", (long long)floor(1000 * ans)); + return 0; +} +/* +连续子序列平均值就转化为S-x平面上的斜率:avg(x,y)=(S(y)-s(x-1))/(y-x+1) +*/ \ No newline at end of file