链接:https://ac.nowcoder.com/acm/contest/20960/1038
来源:牛客网

题目描述

你的团队中有 nnn 个人,每个人有一个能力值 aia_iai,现在需要选择若干个人组成一个团队去参加比赛,由于比赛的规则限制,一个团队里面任意两个人能力的差值必须要小于等于 kkk ,为了让更多的人有参加比赛的机会,你最多能选择多少个人参加比赛?

输入描述:

	

第一行一个整数 TTT,表示案例组数。

每个案例有两行:

第一行两个正整数 n,kn,kn,k ,表示人的数量。

第二行n个以空格分隔的整数 aia_iai ,表示每个人的能力值。

输出描述:

	

每个案例输出一行,表示可以参加比赛的最多人数。

示例1

输入

1
5 3
8 3 5 1 6

输出

3

说明

选择能力值为 3,5,63,5,63,5,6 或者 5,6,85,6,85,6,8
将原序列排序后可以发现结果一定是排序后的某个连续的序列。所以使用尺取法即可快速解出。
#include <bits/stdc++.h>


using namespace std;

const int MAXN = 2e5;
int a[MAXN];

int main() {
    int T;
    cin>>T;
    while (T--) {
        int n, k;
        cin>>n>>k;
        for (int i=0;i<n;i++) {
            cin>>a[i];
        }
        sort(a, a+n);
        int l=0, r=0;
        int cnt = 0, ans = 0;
        while (l<=r&&l<n&&r<n) {
            if (a[r]-a[l]<=k) {
                cnt++;
                ans = max(ans, cnt);
                r++;
            } else {
                l++;
                cnt--;
            }
        }
        cout<<ans<<endl;
    }
    
    return 0;
}