HDU 3530Subsequence(单调队列)
题意
给出$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(单调队列)的更多相关文章
- HDU 3507 单调队列 斜率优化
斜率优化的模板题 给出n个数以及M,你可以将这些数划分成几个区间,每个区间的值是里面数的和的平方+M,问所有区间值总和最小是多少. 如果不考虑平方,那么我们显然可以使用队列维护单调性,优化DP的线性方 ...
- hdu 3530 单调队列最值
/** HDU 3530 单调队列的应用 题意: 给定一段序列,求出最长的一段子序列使得该子序列中最大最小只差x满足m<=x<=k. 解题思路: 建立两个单调队列分别递增和递减维护(头尾删 ...
- hdu 3401 单调队列优化DP
Trade Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- hdu 3415(单调队列) Max Sum of Max-K-sub-sequence
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=3415 大意是给出一个有n个数字的环状序列,让你求一个和最大的连续子序列.这个连续子序列的长度小于等于k. ...
- hdu 3401 单调队列优化+dp
http://acm.hdu.edu.cn/showproblem.php?pid=3401 Trade Time Limit: 2000/1000 MS (Java/Others) Memor ...
- hdu 3415 单调队列
Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU 2191 - 单调队列优化多重背包
题目: 传送门呀传送门~ Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种 ...
- HDU 3530 单调队列
题目大意:给你n个数, 让你问你最长的满足要求的区间有多长,区间要求:MAX - MIN >= m && MAX - MIN <= k 思路:单调队列维护递增和递减,在加入 ...
- HDU 4122 单调队列
转载自:http://blog.csdn.net/lvshubao1314/article/details/46910271 DES :给出n个订单和m是商店的开放时间.然后n行给出n个订单的信息.然 ...
随机推荐
- Lagom学习 五 Hello world工程
用Maven创建一个Hello world的Lagom工程: 1: 在想创建工程的目下下,打开CMD 2: mvn archetype:generate -Dfilter=com.lightbend ...
- Jmeter查看结果树Unicode编码转中文方法
本文为转载微信公众号文章,如作者发现后不愿意,请联系我进行删除 在jmeter工具的使用中,不管是测试接口还是调试性能时,查看结果树必不可少,然而在查看响应数据时,其中的中文经常以Unicode的编码 ...
- Maven项目实战(1)
一.maven的好处? 同样的项目使用maven工程来实现,它的项目源码很小: 1.依赖管理 就是对jar 包管理的过程 2.项目的一键构建 (编译-----测试----- 运行 --打包------ ...
- va_list函数学习
当你的函数的参数个数不确定时,就可以使用上述宏进行动态处理,这无疑为你的程序增加了灵活性. va_list的使用方法: a) 首先在函数中定义一个具有va_list型的变量,这个变量是指向参数的指针 ...
- huipengly的2018年度总结
一.技术 1.入门C++ 今年看完了一本很厚很厚的书——<c++ primer 5th>.从头到尾,基本上每一个课后练习题都完成了.入门了C++这个大坑,也初步了解了面向对象这个程序抽象方 ...
- OrderBy和OrderByDescending排序
昨天有练习对数字阵列进行排序,<C#阵列Array排序>https://www.cnblogs.com/insus/p/10825174.html 其实一切都弄得很复杂,array已经有2 ...
- Weekly Contest 112
945. Minimum Increment to Make Array Unique Given an array of integers A, a move consists of choosin ...
- unity2017分离动作
http://tsubakit1.hateblo.jp/entry/2015/06/01/235939 using UnityEngine; using UnityEditor; using Syst ...
- 小a和uim之大逃离(luogu P1373 dp)
小a和uim之大逃离(luogu P1373 dp) 给你一个n*m的矩阵,其中元素的值在1~k内.限制只能往下和往右走,问从任意点出发,到任意点结束,且经过了偶数个元素的合法路径有多少个.在此题中, ...
- 在VMware上克隆Linux虚拟机及其网卡配置方法
最近在搭建Hadoop集群,1个Master,3个Workers.使用VMware workstations创建Linux虚拟机,版本是CentOS7.安装完成并做了相应的网络配置后,使用VMware ...