HDU 3530】的更多相关文章

Subsequence HDU - 3530 方法:单调队列区间最大最小 错误记录(本地写错)的原因:写成每次试着扩展右端点,却难以正确地处理"在多扩展右端点之后减去多扩展的部分"这一任务(分类太多,例如:由于无法扩展有端点有可能是因为有端点已经到达最右端,也可能是因为最大最小差超过要求).显然那样写没有每次扩展一个右端点,并从左侧开始删直到重新使序列符合标准(two_pointers?)方便. #include<cstdio> #include<algorithm&…
/** HDU 3530 单调队列的应用 题意: 给定一段序列,求出最长的一段子序列使得该子序列中最大最小只差x满足m<=x<=k. 解题思路: 建立两个单调队列分别递增和递减维护(头尾删除,只有尾可插入) Max - Min 为两个队列的队首之差while(Max-Min>K) 看哪个的队首元素比较前就移动谁的 最后求长度时,需要先记录上一次的被淘汰的最值位置last ,这样[last+1,i]即为满足条件的连续子序列了 i - last */ #include <stdio.h…
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3530 Subsequence Description There is a sequence of integers. Your task is to find the longest subsequence that satisfies the following condition: the difference between the maximum element and the minim…
acm.hdu.edu.cn/showproblem.php?pid=3530 [题意] 给定一个长度为n的序列,问这个序列满足最大值和最小值的差在[m,k]的范围内的最长子区间是多长? [思路] 对于序列中特定的位置j,我们固定右端j考察左端i,发现[i,j]内的最大值随i的增大而非严格递减 对于序列中特定的位置j,我们固定右端j考察左端i,发现[i,j]内的最小值随i的增大而非严格递增 所以[i,j]内最大值与最小值的差随i的增大而递减 对于序列中特定的位置i,我们固定左端i考察右端j,发现…
传送门 Description There is a sequence of integers. Your task is to find the longest subsequence that satisfies the following condition: the difference between the maximum element and the minimum element of the subsequence is no smaller than m and no la…
题目链接 题目给出n个数, 一个下界m, 一个上界k, 让你求出最长的一段序列, 满足这段序列中的最大的数-最小的数<=k&&>=m, 输出这段长度. 可以维护两个队列, 一个队列的队头元素是这一段中的最大值,是一个单调递减的数列: 另一个队列是这段中的最小值, 单调递增的数列.具体看代码. #include<bits/stdc++.h> using namespace std; ; int a[maxn], q1[maxn], q2[maxn]; int main…
传送门 题意: 给出一个序列,求最长的连续子序列,使得 m ≤ Max-Min ≤ k 我的理解: 定义数组 a[] 存储输入的 n 个数: 定义两个双端队列: deque<int >qMax,qMin; qMax : 维护前 i 个数的最大值(非递增序列): qMin : 维护前 i 个数的最小值(非递增序列): ;i <= n;++i) { ///注意此处用了'=',也就是说,队列中的所有数都互异 while(!qMax.empty() && a[qMax.back(…
题目大意:给你n个数, 让你问你最长的满足要求的区间有多长,区间要求:MAX - MIN >= m && MAX - MIN <= k 思路:单调队列维护递增和递减,在加入数值的过程中更新答案. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define pii pair<int,int> #def…
http://acm.hust.edu.cn/vjudge/problem/11253 这题要找到区间和在[m,k]范围内的最长区间 用两个单调序列保存区间最大值和最小值.当最大值-最小值>k时更新head,如果最大值-最小值>=m更新答案 #include <iostream> #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #inc…
题意:给你一个长度为n的数列,要求一个子区间,使得区间的最大值与最小值的差s满足,m<=s<=k,求满足条件的最长子区间 /* 单调队列 我们可以用单调队列分别维护最大值和最小值 当差值大于r时要把head小的那个队列的队头弹出 每次用合法的差值更新答案 */ #include<cstdio> #include<iostream> #include<cstring> #define M 1000010 using namespace std; int a[M…