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 + 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(单调队列)相关推荐
- hdu 4193(单调队列)
题意:给你一个n项的序列,每次可以把序列的首项移动到末尾,显然一共可以构成 n 种序列,问一共有多少种序列满足条件:序列的前 i 项和都大于等于0(i:1~n). 解题思路:这道题我想的复杂了,实际上 ...
- hdu 4362(单调队列优化dp)
题意:有m个阶段,每个阶段都有n个龙珠,当在某一阶段选择一个龙珠,该阶段其他龙珠都会消失.给出两个m*n的矩阵,第一个矩阵表示消灭第i个阶段第j个龙珠的位置,第二个矩阵表示取第i个阶段第j个龙珠消耗的 ...
- hdu 3401(单调队列优化dp)
注意:这题题意是有操作的天数相隔要大于w 然后列出状态转移方程就可以发现,可以用优点队列优化啦. 构造状态dp[i][j]表示第i 天拥有 j只股票的时候,赚了多少钱 状态转移有: 1.从前一天不买不 ...
- Fxx and game hdu 5945 单调队列dp
dfs你怕是要爆炸 考虑dp; 很容易想到 dp[ i ] 表示到 i 时的最少转移步数: 那么: dp[ i ]= min( dp[ i ],dp[ i-j ]+1 ); 其中 i-t<=j& ...
- hdu 3530 单调队列 **
题意:题意:给你一个长度为n的数列,要求一个子区间,使得区间的最大值与最小值的差s满足, m<=s<=k,求满足条件的最长子区间 链接:点我 假设数列为:8,7,12,5,16,9,17, ...
- hdu 3706 Second My Problem First 单调队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3706 Second My Problem First Time Limit: 12000/4000 M ...
- HDU 6194 string string string :后缀数组+单调队列 | 后缀自动机
题意:给出一个字符串,求出出现了恰好k次的子串的个数. 题解:恰好k次 = 至少k次 - 至少k+1次.答案转化为求至少出现k次的子串个数统计.构造好后缀数组以及很重要的Height数组之后.用一个k ...
- Hdu 2430 Beans (数据结构_单调队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2430 题目大意:有n坨豌豆,每坨都有w[i]个,现在要从中选择连续的若干坨,然后用一个能装p个豌豆的背 ...
- Hdu 4193 Non-negative Partial Sums (数据结构_单调队列)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4193 题目大意: 给定一个长度为n的循环序列,从n个不同位置开始,问有几个位置使得一下情况成立:所有 ...
最新文章
- MYSQL:MYSQL索引为什么选择B+树?
- react循环key值_React源码揭秘(三):Diff算法详解
- 485串口测试工具软件下载_串口调试助手详细讲解(结合实操),通讯问题不再是问题...
- jQuery实现 div里面的文字如何自动缩小,避免文字溢出
- [原创]java WEB学习笔记91:Hibernate学习之路-- -HQL 迫切左外连接,左外连接,迫切内连接,内连接,关联级别运行时的检索策略 比较。理论,在于理解...
- Datatypes In SQLite Version 3
- WMI 查询分析工具更新
- Hadoop_17_MapRduce_案例2_实现用户手机流量统计(ReduceTask并行度控制)
- python第四章选择题_PythonCrashCourse 第四章习题
- 利用ACIS、HOOPS开发三维软件
- 基于spss的偏相关分析(partial correlation analysis)
- 小白文件管理器共享服务器,在WIN7下使用小白文件管理器局域网功能(SMB)的教程...
- vios support for power
- 使用print时出错 SyntaxError: Missing parentheses in call to ‘print‘ Did you mean print(““)
- 请问想考软考,零基础的话,哪个证书最好考呢
- WordPress网站程序如何搭建教程详细流程步骤
- 图文详解 Windows 2003服务器集群安装(5)(完)
- [程序员学英语]英语国际音标
- 计算机网页设计布局与排版研究,计算机网页设计中的布局与排版研究
- [数值微分]数值微分的误差分析
热门文章
- BugkuCTF-Crypto题给你私钥吧
- html5的高级选择器,web@css高级选择器(after,befor用法),基本css样式
- reducebykeyandwindow java_Spark Streaming笔记整理(三):DS的transformation与output操作
- linux启动过程中内核拷贝,轻松识破linux内核启动过程中的“”套路“”
- 空格 过滤多个_CAD选择过滤器的运算符如何使用?
- eclipse debug(程序调试)单步执行 简述
- android adb apk包名,ADB命令简单使用--查看包名、activity等
- 江西小学计算机说课稿,2019江西教师招聘面试-小学数学-说课稿
- php教程调用数据库,PHP数据库调用类调用实例,php数据库调用实例_PHP教程
- 小学四年级计算机制作月历教案,四年级上册信息技术教案-1制作月历|冀教版(5页)-原创力文档...