hdu 3530 Subsequence(单调队列)
来源:互联网 发布:滨州行知中学电话 编辑:程序博客网 时间:2024/06/05 03:00
http://acm.hdu.edu.cn/search.php?action=listproblem
题目是要求一段区间内最大值与最小值的差不低于m不超过k,那么维护一个递增的单调队列和一个递减的单调队列。凡是差值超过k的就往前挪动,满足条件之后每次得到的一个区间,如果符合差值不低于m的条件,更新区间长度的ans值就行了。
#include<iostream>using namespace std;#define maxn 100010int n,m,k,q_max[maxn],q_min[maxn],a[maxn];int main(){ while(cin>>n>>m>>k) { for(int i=1;i<=n;i++) cin>>a[i]; int l1=0,r1=0,l2=0,r2=0,ans=0,pos=0; for(int i=1;i<=n;i++) { while(r1>l1&&a[q_max[r1-1]]<=a[i]) //维护一个递减的单调队列 r1--; q_max[r1++]=i; while(r2>l2&&a[q_min[r2-1]]>=a[i]) //维护一个递增的单调队列 r2--; q_min[r2++]=i; while(r1>l1&&r2>l2&&a[q_max[l1]]-a[q_min[l2]]>k) //如果max-min>k 每次更新位置较小的那一个 { if(q_max[l1]<q_min[l2]) pos=q_max[l1++]; else pos=q_min[l2++]; } if(r1>l1&&r2>l2&&a[q_max[l1]]-a[q_min[l2]]>=m) //比较每次符合max-min>=m条件的区间大小 更新ans值 ans=max(ans,i-pos); } cout<<ans<<endl; } return 0;}
阅读全文
0 0
- HDU 3530 Subsequence(单调队列)
- HDU 3530 Subsequence(单调队列)
- HDU 3530Subsequence(单调队列维护)
- 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 单调队列
- HDU 3530 --- Subsequence 单调队列
- 文章标题 HDU 3530 : Subsequence(单调队列)
- hdu 3530 Subsequence(DP+单调队列优化)
- HDU-6126 Give out candies(最小割)
- lintcode --最小路径和
- POJ 2752 Seek the Name, Seek the Fame (KMP)
- mongoDB 安装和启动
- 1.16 C# 委托(下)
- hdu 3530 Subsequence(单调队列)
- Origin图中插入另一张jpg图
- slf4j 和 log4j合用的(Maven)配置
- 解析xml文件
- 深度学习---Python OS模块命令
- http://blog.csdn.net/wency935486/article/details/73604574
- Squid(代理缓存服务器)
- Linux文件系统的目录树
- sleep和wait区别总结