提交时间:2024-10-24 13:31:46
运行 ID: 33841
#include <algorithm> #include <cstdio> #include <vector> using namespace std; using i64 = long long; int get_days(const vector<int>& plans, int n, int k) { int l = 0, mx = 1; for (int r = 0; r < n; ++r) { while (l < n && plans[r] - plans[l] > k) ++l; if (l >= n) break; // fprintf(stderr, "%d %d\n", l, r); mx = max(mx, r - l + 1); } return mx; } void solve_test() { int n, k; scanf("%d %d", &n, &k); vector<int> plans(n); for (int& plan : plans) scanf("%d", &plan); vector<vector<int>> segs; sort(plans.begin(), plans.end()); vector<int> curr { plans[0] }; for (int i = 1; i < n; ++i) { if (plans[i] - plans[i - 1] > 1) { segs.emplace_back(curr); vector<int>(1, plans[i]).swap(curr); } else curr.emplace_back(plans[i]); } if (!curr.empty()) segs.emplace_back(curr); int mx = 1; for (const auto& seg : segs) mx = max(mx, get_days(seg, seg.size(), k)); // fputc('\n', stderr); printf("%d\n", mx); } int main() { // freopen("clamprun.in", "r", stdin); // freopen("clamprun.out", "w", stdout); int t; scanf("%d", &t); while (t-- > 0) solve_test(); // system("grep VmPeak /proc/$PPID/status >&2"); // fclose(stdin); // fclose(stdout); return 0; }