hdoj--3530 Subsequence(单调队列)
来源:互联网 发布:mac能玩gta5 编辑:程序博客网 时间:2024/05/23 17:55
hdoj 3530
题意
在一个整数序列中,找到一个最长的子序列,满足该子序列的最大元素与最小元素的差值不小于 m 也不大于 k。
题解
用单调队列维护前 i 个元素的最大和最小值。
参考
#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <queue>using namespace std;typedef long long ll;const int maxn = 100000 + 10;int a[maxn];int n, m, k;int maxQue[maxn], minQue[maxn];// 109MS 2416Kvoid solve(){ int mintail = 0, minhead = 0, maxtail = 0, maxhead = 0; int ans = 0, st = 0; for(int i = 0; i < n; ++i){ while(minhead < mintail && a[minQue[mintail - 1]] >= a[i]) --mintail; minQue[mintail++] = i; while(maxhead < maxtail && a[maxQue[maxtail - 1]] <= a[i]) --maxtail; maxQue[maxtail++] = i; while(a[maxQue[maxhead]] - a[minQue[minhead]] > k){ if(maxQue[maxhead] < minQue[minhead]) st = maxQue[maxhead++] + 1; else st = minQue[minhead++] + 1; } if(a[maxQue[maxhead]] - a[minQue[minhead]] >= m) ans = max(ans, i - st + 1); } cout << ans << endl;}int main(){ while(cin >> n >> m >> k){ for(int i = 0; i < n; ++i) scanf("%d", a + i); solve(); } return 0;}
0 0
- hdoj--3530 Subsequence(单调队列)
- 20141002 【 单调队列 】 hdoj 3530 Subsequence
- HDOJ 3530 Subsequence(单调队列(含单调队列详解))
- HDU 3530 Subsequence 【单调队列】
- hdu 3530 Subsequence //单调队列
- hdu 3530 Subsequence 单调队列
- Hdu 3530 Subsequence 单调队列
- hdu 3530 Subsequence(单调队列)
- 单调队列 HDU 3530 Subsequence
- hdu 3530 Subsequence 单调队列
- hdu 3530 Subsequence 单调队列
- HDU - 3530 Subsequence 单调队列
- hdu 3530 Subsequence 单调队列
- HDU 3530 --- Subsequence 单调队列
- hdu 3530 Subsequence(DP+单调队列优化)
- HDU 3530 Subsequence(单调队列)
- hud-3530-Subsequence-维护两个单调队列
- hdu 3530 Subsequence dp+单调队列
- Hive
- Salient Object Detection and Segmentation
- 日志aop方式
- Sqoop
- Python装饰器真的只是语法糖吗?
- hdoj--3530 Subsequence(单调队列)
- Server将表单数据获取并返给Client
- Spring通过实现getBean方法获得Bean的实例
- Hibernate Annotation中BLOB、CLOB注解写法
- C#中如何申明固定长度的数组
- zookeeper
- 我是一名程序猿,我喜欢走在路上的感觉。
- Github for windows的使用
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记13)