博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Subsequence(HDU3530+单调队列)
阅读量:5348 次
发布时间:2019-06-15

本文共 1494 字,大约阅读时间需要 4 分钟。

题目链接

题面

1322898-20190711203402525-1242525854.png

题意

找到最长的一个区间,使得这个区间内的最大值减最小值在\([m,k]\)中。

思路

我们用两个单调队列分别维护最大值和最小值,我们记作\(q1\)\(q2\)

如果\(q1\)的底部的值与\(q2\)的底部的值大于\(k\),则将\(q1,q2\)底部中下标最小的\(pop\)掉,并记录下来,记作\(tmp\),如果\(q1,q2\)底部的值大于等于\(m\)则更新答案\(ans = max(ans,i-tmp)\)

代码实现如下

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;typedef pair
pLL;typedef pair
pLi;typedef pair
pil;;typedef pair
pii;typedef unsigned long long uLL;#define lson rt<<1#define rson rt<<1|1#define lowbit(x) x&(-x)#define name2str(name) (#name)#define bug printf("*********\n")#define debug(x) cout<<#x"=["<
<<"]" <
q1, q2;int main() {#ifndef ONLINE_JUDGE FIN;#endif // ONLINE_JUDGE while(~scanf("%d%d%d", &n, &m, &k)) { int ans = 0; while(!q1.empty()) q1.pop_back(); while(!q2.empty()) q2.pop_back(); int tmp = 0; for(int i = 1; i <= n; ++i) { scanf("%d", &a[i]); while(!q1.empty() && a[i] > a[q1.front()]) q1.pop_front(); q1.push_front(i); while(!q2.empty() && a[i] < a[q2.front()]) q2.pop_front(); q2.push_front(i); while(!q1.empty() && ! q2.empty() && a[q1.back()] - a[q2.back()] > k) { if(q1.back() > q2.back()) tmp = q2.back(), q2.pop_back(); else tmp = q1.back(), q1.pop_back(); } if(!q1.empty() && !q2.empty() && a[q1.back()] - a[q2.back()] >= m) { ans = max(ans, i - tmp); } } printf("%d\n", ans); } return 0;}

转载于:https://www.cnblogs.com/Dillonh/p/11172583.html

你可能感兴趣的文章
mysql统计一张表中条目个数的方法
查看>>
ArcGIS多面体(multipatch)解析——引
查看>>
css3渐变画斜线 demo
查看>>
JS性能DOM优化
查看>>
HAL层三类函数及其作用
查看>>
Odoo 去掉 恼人的 "上午"和"下午"
查看>>
web@h,c小总结
查看>>
java编程思想笔记(一)——面向对象导论
查看>>
Data Structure 基本概念
查看>>
Ubuntu改坏sudoers后无法使用sudo的解决办法
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
Python之旅Day14 JQuery部分
查看>>
core--线程池
查看>>
redux-effect
查看>>
Android轻量级的开源缓存框架ASimpleCache
查看>>
他山之石:加载图片的一个小问题
查看>>
shell - 常识
查看>>
linux下编译复数类型引发的错误:expected unqualified-id before '(' token
查看>>
codeforces 1041A Heist
查看>>