hdu3530 Subsequence 单调队列
来源:互联网 发布:linux python3 idle 编辑:程序博客网 时间:2024/05/14 19:45
题目:在一个序列中找一个最长子串,使得子串的m<=极差<=k.
维护一个递减的单调队列q1(队首为当前最大),同时维护一个递增的单调队列q2(队首为当前最小),控制最大减最小 小于等于k , 若最大减最小大于等于m,则更新答案。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;const int N = 1e5+10;typedef long long ll;int q1[N*5],q2[N*5],a[N];int main(){ int n,m,k; while(scanf("%d%d%d",&n,&m,&k)!=EOF){ int front1,front2,rear1,rear2,x; front1 = rear1 = 0; front2 = rear2 = 0; int ans = 0; int from = 1; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); while(front1<rear1 && a[q1[rear1-1]]<a[i]) rear1--; while(front2<rear2 && a[q2[rear2-1]]>a[i]) rear2--; q1[rear1++] = i; q2[rear2++] = i; while(front1<rear1 && front2<rear2 && a[q1[front1]]-a[q2[front2]]>k){ if(q1[front1]<q2[front2]){ from = q1[front1]+1; front1++; } else{ from = q2[front2]+1; front2++; } } if(front1<rear1 && front2<rear2 && a[q1[front1]]-a[q2[front2]]>=m) ans = max(ans,i-from+1); } printf("%d\n",ans); } return 0;}
0 0
- hdu3530 Subsequence 单调队列
- hdu3530 Subsequence 单调队列
- hdu3530 Subsequence 单调队列
- hdu3530 Subsequence 单调队列
- hdu3530 Subsequence 单调队列
- hdu3530 Subsequence(单调队列)
- #HDU3530#Subsequence(单调队列)
- hdu3530 Subsequence 单调队列
- hdu3530——Subsequence(单调队列优化DP)
- hdu3530单调队列
- HDU3530(单调队列)
- hdu3530 单调队列
- hdu3530(单调队列)
- hdu3530单调队列(双)
- HDU3530 单调队列的应用
- hdu3530(最长连续子串+单调队列)
- hdu3530 Subsequence
- hdu3530 Subsequence
- [BZOJ 1303] CQOI 2009 中位数图 · 数学
- Android Project Butter分析
- Linux 下yum安装php
- iOS 获取屏幕分辨率 以及放大模式、高清模式区别
- servlet介绍
- hdu3530 Subsequence 单调队列
- HttpClient ip直连域名问题那些事
- vim
- 为MultipeerConnectivity蓝牙连接写的demo
- Mysql 5.6 双主互备高可用(Keepalived+mysql) (二)
- window.clearInterval与window.setInterval的用法
- linux编程
- php---算法
- Codeforces Round #307 (Div. 2) B. ZgukistringZ