From 1db2629aa5dfd328edfad49849bef5ac07ef9e5a Mon Sep 17 00:00:00 2001 From: user Date: Sun, 16 Aug 2026 10:09:16 +0800 Subject: [PATCH] new file: 24.cpp --- 24.cpp | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 24.cpp diff --git a/24.cpp b/24.cpp new file mode 100644 index 0000000..200642d --- /dev/null +++ b/24.cpp @@ -0,0 +1,72 @@ +#include +#include +#include +using namespace std; +int T, n, m; +long long k; +int p[500005], t[500005], lg2[500005]; +template +inline TT read() +{ + TT x = 0; + bool w = true; + register char ch = getchar(); + while (ch < '0' || ch > '9') + { + if (ch == '-') + w = false; + ch = getchar(); + } + while (ch >= '0' && ch <= '9') + x = (x << 3) + (x << 1) + (ch ^ '0'), ch = getchar(); + return w ? x : -x; +} +template +inline void put(TT x) +{ + if (x < 0) + putchar('-'), x = -x; + if (x > 9) + put(x / 10); + putchar(x % 10 + '0'); +} + +inline bool pd(const int &L, const int &R) +{ + if (R > n) + return false; + for (register int i = L; i <= R; i++) + t[i] = p[i]; + long long sum = 0; + sort(t + L, t + R + 1); + int l = L, r = R, cnt = 0; + while (l < r && sum <= k && ++cnt <= m) + sum += (long long)(t[r] - t[l]) * (t[r] - t[l]), l++, r--; + return sum <= k; +} + +int main() +{ + for (register int i = 2; i <= 5e5; i++) + lg2[i] = lg2[i >> 1] + 1; + T = read(); + while (T--) + { + n = read(), m = read(), k = read(); + for (register int i = 1; i <= n; i++) + p[i] = read(); + int ans = 0; + int l = 1, r = l, flag = 1; + while (r <= n) + { + if (!flag) + ans++, l = r + 1, r = l; + if (pd(l, r + (1 << flag) - 1)) + r = r + (1 << flag) - 1, flag++; + else + flag--; + } + put(ans); + } + return 0; +}