51nod 1275 连续子段的差异
2017-07-12 18:57
190 查看
#include<bits/stdc++.h> using namespace std; const int MAXN=50050; int a[MAXN]; deque<int> dpmin,dpmax; int main() { int n,k,i,j; long long ans; while(~scanf("%d%d",&n,&k)) { for(i=1;i<=n;i++) scanf("%d",&a[i]); dpmin.clear(); dpmax.clear(); ans=0; for(i=1,j=1;i<=n;i++) { for(;j<=n;j++) { while(!dpmin.empty()&&a[dpmin.back()]>=a[j]) dpmin.pop_back(); dpmin.push_back(j); while(!dpmax.empty()&&a[dpmax.back()]<=a[j]) dpmax.pop_back(); dpmax.push_back(j); if(a[dpmax.front()]-a[dpmin.front()]>k) break; } ans+=j-i; if(dpmin.front()==i) dpmin.pop_front(); if(dpmax.front()==i) dpmax.pop_front(); } printf("%lld\n",ans); } }
相关文章推荐
- 51nod 1275:连续子段的差异 单调队列
- 51nod-1275 连续子段的差异(单调队列)
- 【单调队列】51nod 1275 连续子段的差异
- 51nod 1275 连续子段的差异
- 51Nod-1275-连续子段的差异
- [单调队列] 51Nod 1275 连续子段的差异
- 51nod 1275 连续子段的差异(twopointer+单调队列)
- 51nod 1275 连续字段的差异(单调队列)
- 51 nod 1275 连续子段的差异(单调队列)
- 连续子段的差异
- 51nod 1049 最大子段和(基础dp)
- 线段树+DP 求区间连续最大子段和 hoj Candy
- 51nod 1049 最大子段和
- 求最大连续子段和 的 dp算法
- 51Nod-1081-子段求和
- 51nod 1050 循环数组最大子段和
- 51nod 最大M子段和 V1,V2,V3 dp 贪心 heap(bzoj2288)
- 51nod 1138 连续整数的和 (规律)
- 算法设计与分析——动态规划方法求解序列的连续最大子段和
- 51Nod 1094 和为k的连续区间