题意

题目链接

给出$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 + ;
const double eps = 1e-, Dlt = 0.97, INF = 1e9 + ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', 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 = , pre = ;
h1 = h2 = ; t1 = t2 = ;
for(int i = ; 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 ;
}
/*
5 3 3
1 2 3 4 5
*/

HDU 3530Subsequence(单调队列)的更多相关文章

  1. HDU 3507 单调队列 斜率优化

    斜率优化的模板题 给出n个数以及M,你可以将这些数划分成几个区间,每个区间的值是里面数的和的平方+M,问所有区间值总和最小是多少. 如果不考虑平方,那么我们显然可以使用队列维护单调性,优化DP的线性方 ...

  2. hdu 3530 单调队列最值

    /** HDU 3530 单调队列的应用 题意: 给定一段序列,求出最长的一段子序列使得该子序列中最大最小只差x满足m<=x<=k. 解题思路: 建立两个单调队列分别递增和递减维护(头尾删 ...

  3. hdu 3401 单调队列优化DP

    Trade Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  4. hdu 3415(单调队列) Max Sum of Max-K-sub-sequence

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=3415 大意是给出一个有n个数字的环状序列,让你求一个和最大的连续子序列.这个连续子序列的长度小于等于k. ...

  5. hdu 3401 单调队列优化+dp

    http://acm.hdu.edu.cn/showproblem.php?pid=3401 Trade Time Limit: 2000/1000 MS (Java/Others)    Memor ...

  6. hdu 3415 单调队列

    Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  7. HDU 2191 - 单调队列优化多重背包

    题目: 传送门呀传送门~ Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种 ...

  8. HDU 3530 单调队列

    题目大意:给你n个数, 让你问你最长的满足要求的区间有多长,区间要求:MAX - MIN >= m && MAX - MIN <= k 思路:单调队列维护递增和递减,在加入 ...

  9. HDU 4122 单调队列

    转载自:http://blog.csdn.net/lvshubao1314/article/details/46910271 DES :给出n个订单和m是商店的开放时间.然后n行给出n个订单的信息.然 ...

随机推荐

  1. requests.session保持会话

    原文地址:https://blog.csdn.net/jyh_jack/article/details/82457953 如何使用requests后登录网站后,保持Session继续实现浏览.下载等效 ...

  2. sorted matrix - search & find-k-th

    sorted matrix ( Young Matrix ) search for a given value in the matrix: 1) starting from upper-right ...

  3. C 汉字处理

    好像有个wchar_t类型的,这里不深究了,只研究char型(1个字符大小)的 1.定义 直接使用char,但每个汉字占据2个字符,所以必须以字符串形式存在 char s[10]; 2.定义时直接赋值 ...

  4. HDU - 6415 多校9 Rikka with Nash Equilibrium(纳什均衡+记忆化搜索/dp)

    Rikka with Nash Equilibrium Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K ...

  5. 一个工程多个Target

    当我们同一个工程需要在不同情形下编译打包,比如打个人包.企业包的时候,其中可能有一些细小的差别,又不想每次都先修改再打包的时候,我们可以通过创建多个Target来实现. 1.copy原有Target ...

  6. jdbcTemplate简单使用

    package com.bizvane.spider.tools; import org.apache.commons.dbcp.BasicDataSource; import org.springf ...

  7. WPF后台修改内容界面不显示问题

    通知3部曲:1.Model继承并实现 INotifyPropertyChanged 接口:2.数据集合使用ObservableCollection<T>集合:3.View使用Binding ...

  8. JS中map list 数组的迭代

    后台传给前台一个map 前台如何迭代呢 $.post("getSys.jhtml", function(data){ var temp = ""; $.each ...

  9. 卸载/安装ubuntu系统教程

    卸载ubuntu 1.修复Mbr 1.下载软件MbrFix,地址:https://www.softpedia.com/get/System/Hard-Disk-Utils/MBRFix.shtml 2 ...

  10. Keras输出每一层网络大小

    示例代码: model = Model(inputs=self.inpt, outputs=self.net) model.compile(loss='categorical_crossentropy ...