HDU 3530 Subsequence

来源:互联网 发布:linux chkconfig list 编辑:程序博客网 时间:2024/06/05 09:55

http://acm.hdu.edu.cn/showproblem.php?pid=3530

#include<iostream>using namespace std;#define N 100005int q_max[N],head_max,tail_max;int q_min[N],head_min,tail_min;int n,m,k;int a[N];void solve(){int ret=0;head_max=tail_max=0;head_min=tail_min=0;int last1=0,last2=0;for(int i=1;i<=n;i++){while(head_max<tail_max&&a[ q_max[tail_max-1] ]<a[i])tail_max--;q_max[tail_max++]=i;while(head_min<tail_min&&a[ q_min[tail_min-1] ]>a[i])tail_min--;q_min[tail_min++]=i;while(a[ q_max[head_max] ]-a[ q_min[head_min] ]>k){if(q_max[head_max]<q_min[head_min])last1=q_max[head_max++];elselast2=q_min[head_min++];}if(a[ q_max[head_max] ]-a[ q_min[head_min] ]>=m)ret=max(ret,i-max(last1,last2));}printf("%d\n",ret);}int main(void){while(~scanf("%d%d%d",&n,&m,&k)){for(int i=1;i<=n;i++)scanf("%d",&a[i]);solve();}}