单调队列1003 HDU 3530 Subsequence
来源:互联网 发布:cf有刷枪软件吗 编辑:程序博客网 时间:2024/05/01 04:03
Problem 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 larger than k.
题意:
给一个长度为n的序列,从中找到一个最长的连续的子序列满足
最大的元素和最小的元素的差>=m&&<=k
思路:
维护两个单调队列,维护的时候是维护最大值减去最小值<=ki就行了
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<string>#include<vector>#include<map>#include<set>using namespace std;#define lowbit(x) (x&(-x))typedef long long LL;const int maxn = 100005;const int inf=(1<<28)-1;deque<pair<int,int> >QueMax,QueMin;int main(){ int n,k,m; while(~scanf("%d%d%d",&n,&m,&k)) { int ans=0; QueMax.clear(); QueMin.clear(); int MinPos=-1; for(int i=0;i<n;++i) { int x; scanf("%d",&x); while(!QueMax.empty()&&QueMax.back().first<x) QueMax.pop_back(); while(!QueMin.empty()&&QueMin.back().first>x) QueMin.pop_back(); QueMax.push_back(make_pair(x,i)); QueMin.push_back(make_pair(x,i)); while(!QueMax.empty()&&!QueMin.empty()&&QueMax.front().first-QueMin.front().first>k) { if(QueMax.front().second>QueMin.front().second) { MinPos=QueMin.front().second; QueMin.pop_front(); } else { MinPos=QueMax.front().second; QueMax.pop_front(); } } if(QueMax.front().first-QueMin.front().first>=m) ans=max(ans,i-MinPos); } printf("%d\n",ans); } return 0;}
0 0
- 单调队列1003 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 3530 Subsequence(单调队列)
- hdu 3530 Subsequence dp+单调队列
- HDU 3530 Subsequence (dp+单调队列)
- hdu 3530 Subsequence(dp单调队列优化)
- HDU 3530 Subsequence(单调队列)
- Android Studio启动虚拟机的时候出现问题Instant Run Requires‘Tools | Android | Enable ADB integration’...
- 单调队列1002 HDU 4122 Alice's mooncake shop 对于学习单调队列的同学不建议做,浪费时间的模拟水题
- docker 简单使用
- Leetcode no. 237
- Linux学习笔记(3) --- Linux常用命令
- 单调队列1003 HDU 3530 Subsequence
- glOrtho()函数和glViewport()函数的理解
- 第十五周项目:程序填空
- 团体程序设计天梯赛-练习集 L2-005
- mysql grant命令
- python偏函数应用
- 《Algorithms》——删除二叉查找树中的结点
- Eclipse NDK 开发之 HelloWorld
- 数据库连接池的实现及原理