题目描述

Tz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值。耍畸形一个人是不行的,于是他找到了你。

输入

输入:第一行两个有空格隔开的整数k(0<=k<=2000,000,000),n(1<=n<=3000,000),k代表Tz设定的最大值,n代表难度序列的长度。第二行为n个由空格隔开的整数ai(1<=ai<=2000,000,000),表示难度序列。

输出

输出:最大的字串长度。

样例输入

3 9
5 1 3 5 8 6 6 9 10

样例输出

4


题解

双指针法+STL-set

考虑随着做端点向右移动,右端点的选择是单调不降的。所以可以使用双指针法扫出以某个点为左端点的最长的区间。

此时需要维护区间最值,可以使用单调队列来在线性时间内解决。当然本题也可以像我一样使用set水过。

#include <cstdio>
#include <set>
using namespace std;
multiset<int> s;
int a[3000010];
int main()
{
int k , n , i , p , ans = 0;
scanf("%d%d" , &k , &n);
for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &a[i]);
for(i = p = 1 ; i <= n ; i ++ )
{
while(p <= n && (s.empty() || max(*(--s.end()) , a[p]) - min(*s.begin() , a[p]) <= k)) s.insert(a[p ++ ]);
ans = max(ans , p - i) , s.erase(s.find(a[i]));
}
printf("%d\n" , ans);
return 0;
}

最新文章

  1. [实战]MVC5+EF6+MySql企业网盘实战(29)——更新日志
  2. 如何识别一个字符串是否Json格式
  3. Struts2文件下载找不到输入流异常
  4. jQuery实现等比例缩放大图片
  5. Hibernate API申明事务边界
  6. C++ string的常用功能
  7. 为Delphi程序增加UAC功能(管理员身份运行exe)
  8. python学习之列表
  9. Lucene打分规则与Similarity模块详解
  10. Django Web开发【6】使用Ajax增强用户体验
  11. 在graphviz中创建可点击的图形
  12. selenium + python自动化测试(一)
  13. react native 开发报错
  14. Kafka命令清单
  15. Linux kernel Programming - Concurrency and Race Conditions
  16. NumPy 迭代数组
  17. Redis-五种数据类型解析
  18. Popupwindow全屏问题
  19. 无法安装Java,以下开关中存在错误:“0”
  20. httpd:RSA certificate configured for SERVER does NOT include an ID which matches the server name

热门文章

  1. 2018.10.24 NOIP2018模拟赛 解题报告
  2. tableviewcell折叠问题,(类似qq列表展开形式) 多个cell同时展开,OC版 和 Swift
  3. Luogu [P2708] 硬币翻转
  4. head与body(新手向)
  5. 微服务SpringCloud+Docker入门到高级实战(教程详情)
  6. webpack4.x ,1基本项目构建 详解
  7. mysql 查询 7天内的数据
  8. 作业hashlib题目
  9. Linux文件类型 扩展名的作用
  10. time模块和datetime模块详解