HDU 3530 Subsequence (dp+單調佇列)
題目連結:
http://acm.hdu.edu.cn/showproblem.php?pid=3530
題意:
找一個最長的區間,區間最大值與最小值的差 大於等於小於等於k
分析:
維護最大值與最小值,然後最大的最大值與最小的最小值的差是不是大於y,大於y誰在前面刪除誰,記錄起點。
程式碼如下:
http://acm.hdu.edu.cn/showproblem.php?pid=3530
題意:
找一個最長的區間,區間最大值與最小值的差 大於等於小於等於k
分析:
維護最大值與最小值,然後最大的最大值與最小的最小值的差是不是大於y,大於y誰在前面刪除誰,記錄起點。
程式碼如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn = 100010;
int a[maxn];
int main()
{
int n,m,k;
while(~scanf("%d%d%d",&n,&m,&k)){
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
deque<int > mmax;
deque<int > mmin;
int ans = 0;
int st = 0;
for(int i=1;i<=n;i++){
while(!mmax.empty()&&a[i]>a[mmax.back()]) mmax.pop_back();//維護單調性
while(!mmin.empty()&&a[i]<a[mmin.back()]) mmin.pop_back();//維護單調性
mmax.push_back(i);
mmin.push_back(i);
while(!mmax.empty()&&!mmin.empty()&&a[mmax.front()]-a[mmin.front()]>k){
if(mmax.front()<mmin.front()){
st = mmax.front();
mmax.pop_front();
}
else {
st=mmin.front();
mmin.pop_front();
}
}
if(!mmax.empty()&&!mmin.empty()&&a[mmax.front()]-a[mmin.front()]>=m)
ans = max(ans,i-st);
}
cout<<ans<<endl;
}
return 0;
}
相關文章
- HDU 3530 單調佇列佇列
- HDU3530 單調佇列的應用佇列
- HDU3415 Max Sum of Max-K-sub-sequence (DP+單調佇列)佇列
- hdu 3415 單調佇列佇列
- poj3017 dp+單調佇列佇列
- hdu 3401 單調佇列+DP佇列
- hdu 4122 單調佇列佇列
- HDU4991 Ordered Subsequence (dp+樹狀陣列+離散化)陣列
- hdu4374單調佇列+dp佇列
- 單調佇列佇列
- 單調佇列雙端佇列佇列
- hdu3415 單調佇列求區間最大和佇列
- hdu 4122Alice's mooncake shop(單調佇列)佇列
- POJ 2823 單調佇列佇列
- HDU 4123 Bob's Race:樹的直徑 + 單調佇列 + st表佇列
- HDU4427Math Magic (dp+滾動陣列)陣列
- bzoj1597: [Usaco2008 Mar]土地購買(斜率優化+Dp+單調佇列)優化佇列
- POJ 3017 單調佇列dp佇列
- 佇列-單端佇列佇列
- HDU 4427 Math Magic【dp+優化+滾動陣列】【好題】優化陣列
- hdu5040 優先佇列+bfs佇列
- noi.ac #289. 電梯(單調佇列)佇列
- HDU 5884-Sort(佇列+二分)佇列
- hdu5380 貪心+雙端佇列佇列
- 多重揹包問題的單調佇列優化佇列優化
- C語言 簡單的佇列(陣列佇列)C語言佇列陣列
- 【BFS+優先佇列】HDU 3442 Three Kingdoms佇列
- HDU4546 比賽難度 (優先佇列)佇列
- hdu 4546 優先佇列 數列組合和第m小佇列
- POJ 2823Sliding Window(單調佇列水題)佇列
- HDU5630 Hiking(貪心+優先佇列)佇列
- RabbitMQ-簡單佇列MQ佇列
- 單向鏈式佇列佇列
- 棧,佇列,優先順序佇列簡單介面使用佇列
- POJ2823 Sliding Window (單調佇列的基本應用)佇列
- 多重揹包O(N*V)演算法詳解(使用單調佇列)演算法佇列
- laravel 佇列的簡單使用Laravel佇列
- 佇列_單向連結串列佇列