题意

题目链接

给出$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. zk 05之:ZooKeeper的配置

    ZooKeeper 的功能特性通过 ZooKeeper 配置文件来进行控制管理( zoo.cfg 配置文件). ZooKeeper 这样的设计其实是有它自身的原因的.通过前面对 ZooKeeper 的 ...

  2. .NETFramework:ConfigurationManager

    ylbtech-.NETFramework:ConfigurationManager 1.程序集 System.Configuration, Version=4.0.0.0, Culture=neut ...

  3. POJ 2387 Til the Cows Come Home Dijkstra求最短路径

    Til the Cows Come Home Bessie is out in the field and wants to get back to the barn to get as much s ...

  4. webbrowser 控件实现WinForm与WebForm交互

    WebBrowser 控件可以让你装载Windows Form 应用程序中的 Web 网页和其它采用浏览器的文件.可以使用webbrowser 控件将现有的web框架控制项加入至 Windows Fo ...

  5. MS SQL Server的COALESCE函数

    MS SQL Server的COALESCE函数是从一系列表达式中返回第一个NOT NULL的值. 检查[B],[Q],[S],[T],[U]的值: 检查顺序[B]->[Q]->[S]-& ...

  6. MyCat - 使用篇(5)

    此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 意思就是,开头为北京的范围在A0000000~A9999999的根据后面的哈希值对5取模平均分布在0,1,2 ...

  7. Kth Largest Element in a Stream

    Design a class to find the kth largest element in a stream. Note that it is the kth largest element ...

  8. hdu1166(线段树单点更新&区间求和模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意:中文题诶- 思路:线段树单点更新,区间求和模板 代码: #include <iost ...

  9. AcDbHelix Demo

    AcDbObjectPointer<AcDbHelix> aHelix; aHelix.create(); aHelix->setAxisPoint(AcGePoint3d(, , ...

  10. 解决phpwind 9 转换到 discuz x 3.1的头像仍然不显示问题

    phpwind 9 转换到 discuz x 3.1后,按照discuz转换程序的步骤做,头像仍然不显示,后来登录后重新上传头像发现,是文件名的原因,如下操作改名即可(还好我的论坛会员不多,不然手改累 ...