题意

题目链接

给出$n$个数,找出最长的区间,使得区间中最大数$-$最小数 $>= m$ 且$<= k$

Sol

考虑维护两个单调队列。

一个维护$1 - i$的最大值,一个维护$1 - i$的最小值。

至于两个限制条件。

$<=k$可以通过调整队首来满足

$>=a$可以在更新答案的时候限制。

刚开始的时候我犯了两个错误

1、直接用数组的指针当下标—>队列没学好

2、更新答案的时候在两个队列的队首取最小,这是不对的。因为队首元素可能是后来被更新的,真正的答案可能比当前优

/*
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<vector>
#define Pair pair<int, int>
#define MP(x, y) make_pair(x, y)
#define fi first
#define se second
using namespace std;
const int MAXN = 1e6 + 10;
const double eps = 1e-10, Dlt = 0.97, INF = 1e9 + 7;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, x, y, a[MAXN];
int h1, t1, q1[MAXN], h2, t2, q2[MAXN];
int main() {while(scanf("%d %d %d", &N, &x, &y) != EOF) {int ans = 0, pre = 0;h1 = h2 = 1; t1 = t2 = 0;for(int i = 1; i <= N; i++) {a[i] = read();while(h1 <= t1 && a[i] > a[q1[t1]]) t1--;//鍖洪棿鏈€澶у€?while(h2 <= t2 && a[i] < a[q2[t2]]) t2--;//鍖洪棿鏈€灏忓€?q1[++t1] = i;q2[++t2] = i;while(h1 <= t1 && h2 <= t2 && a[q1[h1]] - a[q2[h2]] > y) {if(q1[h1] < q2[h2]) pre = q1[h1], h1++;else pre = q2[h2], h2++;}if(h1 <= t1 && h2 <= t2 && (a[q1[h1]] - a[q2[h2]] >= x)) ans = max(ans, i - pre); }printf("%d\n", ans);}return 0;
}
/*
5 3 3
1 2 3 4 5
*/

HDU 3530Subsequence(单调队列)相关推荐

  1. hdu 4193(单调队列)

    题意:给你一个n项的序列,每次可以把序列的首项移动到末尾,显然一共可以构成 n 种序列,问一共有多少种序列满足条件:序列的前 i 项和都大于等于0(i:1~n). 解题思路:这道题我想的复杂了,实际上 ...

  2. hdu 4362(单调队列优化dp)

    题意:有m个阶段,每个阶段都有n个龙珠,当在某一阶段选择一个龙珠,该阶段其他龙珠都会消失.给出两个m*n的矩阵,第一个矩阵表示消灭第i个阶段第j个龙珠的位置,第二个矩阵表示取第i个阶段第j个龙珠消耗的 ...

  3. hdu 3401(单调队列优化dp)

    注意:这题题意是有操作的天数相隔要大于w 然后列出状态转移方程就可以发现,可以用优点队列优化啦. 构造状态dp[i][j]表示第i 天拥有 j只股票的时候,赚了多少钱 状态转移有: 1.从前一天不买不 ...

  4. Fxx and game hdu 5945 单调队列dp

    dfs你怕是要爆炸 考虑dp; 很容易想到 dp[ i ] 表示到 i 时的最少转移步数: 那么: dp[ i ]= min( dp[ i ],dp[ i-j ]+1 ); 其中 i-t<=j& ...

  5. hdu 3530 单调队列 **

    题意:题意:给你一个长度为n的数列,要求一个子区间,使得区间的最大值与最小值的差s满足, m<=s<=k,求满足条件的最长子区间 链接:点我 假设数列为:8,7,12,5,16,9,17, ...

  6. hdu 3706 Second My Problem First 单调队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3706 Second My Problem First Time Limit: 12000/4000 M ...

  7. HDU 6194 string string string :后缀数组+单调队列 | 后缀自动机

    题意:给出一个字符串,求出出现了恰好k次的子串的个数. 题解:恰好k次 = 至少k次 - 至少k+1次.答案转化为求至少出现k次的子串个数统计.构造好后缀数组以及很重要的Height数组之后.用一个k ...

  8. Hdu 2430 Beans (数据结构_单调队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2430 题目大意:有n坨豌豆,每坨都有w[i]个,现在要从中选择连续的若干坨,然后用一个能装p个豌豆的背 ...

  9. Hdu 4193 Non-negative Partial Sums (数据结构_单调队列)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4193 题目大意: 给定一个长度为n的循环序列,从n个不同位置开始,问有几个位置使得一下情况成立:所有 ...

最新文章

  1. MYSQL:MYSQL索引为什么选择B+树?
  2. react循环key值_React源码揭秘(三):Diff算法详解
  3. 485串口测试工具软件下载_串口调试助手详细讲解(结合实操),通讯问题不再是问题...
  4. jQuery实现 div里面的文字如何自动缩小,避免文字溢出
  5. [原创]java WEB学习笔记91:Hibernate学习之路-- -HQL 迫切左外连接,左外连接,迫切内连接,内连接,关联级别运行时的检索策略 比较。理论,在于理解...
  6. Datatypes In SQLite Version 3
  7. WMI 查询分析工具更新
  8. Hadoop_17_MapRduce_案例2_实现用户手机流量统计(ReduceTask并行度控制)
  9. python第四章选择题_PythonCrashCourse 第四章习题
  10. 利用ACIS、HOOPS开发三维软件
  11. 基于spss的偏相关分析(partial correlation analysis)
  12. 小白文件管理器共享服务器,在WIN7下使用小白文件管理器局域网功能(SMB)的教程...
  13. vios support for power
  14. 使用print时出错 SyntaxError: Missing parentheses in call to ‘print‘ Did you mean print(““)
  15. 请问想考软考,零基础的话,哪个证书最好考呢
  16. WordPress网站程序如何搭建教程详细流程步骤
  17. 图文详解 Windows 2003服务器集群安装(5)(完)
  18. [程序员学英语]英语国际音标
  19. 计算机网页设计布局与排版研究,计算机网页设计中的布局与排版研究
  20. [数值微分]数值微分的误差分析

热门文章

  1. BugkuCTF-Crypto题给你私钥吧
  2. html5的高级选择器,web@css高级选择器(after,befor用法),基本css样式
  3. reducebykeyandwindow java_Spark Streaming笔记整理(三):DS的transformation与output操作
  4. linux启动过程中内核拷贝,轻松识破linux内核启动过程中的“”套路“”
  5. 空格 过滤多个_CAD选择过滤器的运算符如何使用?
  6. eclipse debug(程序调试)单步执行 简述
  7. android adb apk包名,ADB命令简单使用--查看包名、activity等
  8. 江西小学计算机说课稿,2019江西教师招聘面试-小学数学-说课稿
  9. php教程调用数据库,PHP数据库调用类调用实例,php数据库调用实例_PHP教程
  10. 小学四年级计算机制作月历教案,四年级上册信息技术教案-1制作月历|冀教版(5页)-原创力文档...