NC204859 组队

题目

题目描述

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

输入描述

第一行一个整数 \(T\),表示案例组数。每个案例有两行:第一行两个正整数 \(n,k\) ,表示人的数量。

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

输出描述

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

示例1

输入

1
5 3
8 3 5 1 6

输出

3

说明

选择能力值为 \(3,5,63,5,63,5,6\) 或者 \(5,6,85,6,85,6,8\)

备注

\(T \leq 10\)

\(1 \leq n \leq 2e5, 1 \leq k \leq 1e9\)

\(1 \leq a_i \leq 1e9\)

题解

思路

知识点:枚举,贪心。

注意到任意两人数值差不能大于 \(k\) ,因此考虑先按从小到大排序,枚举左端点和右端点,在符合右端点减左端点数值小于等于 \(k\) 的情况下加人数,其答案具有单调性,即左端点改变右端点不需要回撤,可以用尺取法。

时间复杂度 \(O(Tn \log n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>

using namespace std;

int a[200007];

int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
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 ans = 0;
int l = 0, r = 0;
while (l < n) {
while (r < n && a[r] - a[l] <= k) r++;
ans = max(ans, r - l);
l++;
}
cout << ans << '\n';
}
return 0;
}

最新文章

  1. Java语言程序设计(基础篇) 第六章 方法
  2. mysql高可用框架-MHA
  3. HDU 2222 Keywords Search(查询关键字)
  4. 汉字转拼音Pinyin4j工具(C#、Java都可用)
  5. ios中get,post和解压缩用法
  6. 路冉的JavaScript学习笔记-2015年1月23日
  7. openwrt 包makefile
  8. 解决“Xlib.h not found when building graphviz on Mac OS X 10.8”错误
  9. ThreeJS笔记(一)
  10. Mad LIbs小游戏
  11. centos适用的国内yum源:网易、搜狐
  12. Linux内核分析作业 NO.2
  13. rails 数据迁移 -migration
  14. vim的翻页、跳转到某一行功能
  15. ftp主动与被动模式详解
  16. Executor 框架
  17. Jersey构建restful风格的WebSerivices(二)
  18. linux下不同tomcat使用不同的jdk版本
  19. Opencv学习笔记1:安装opencv和VS2015并进行环境配置
  20. Selenium - Switch &amp; Select Api

热门文章

  1. 计算属性、侦听属性、局部与全局组件使用、组件通信(父子互传)、ref属性、动态组件和keep-alive、插槽
  2. MySQL 视图简介
  3. 手把手教会将 Windows 窗体桌面应用从.NET Framework迁移到 .NET SDK/.NET 6 格式
  4. OV5640图像采集(一)VGA显示
  5. 【Java分享客栈】一文搞定CompletableFuture并行处理,成倍缩短查询时间。
  6. 半导体行业如何保持高效远程办公?因果集群(Causal Clustering)了解一下!
  7. R 数据可视化: PCA 主成分分析图
  8. kill -9 进程杀不掉,怎么办?
  9. 基于Docker&Kubernetes构建PaaS平台基础知识梳理
  10. Git 使用心得 & 常见问题整理