51nod 1275 连续子段的差异
2017-05-03 21:02
162 查看
#include <bits/stdc++.h> using namespace std; const int maxn = 50000 + 5; int a[maxn]; int main() { int n,k; scanf("%d%d",&n,&k); for(int i=0;i<n;i++) scanf("%d",&a[i]); int ans = 0; deque<int> Amin,Amax; //单调递减队列,单调递增队列 for(int i=0,j=0;i<n;i++) { while(j<n) { while(!Amin.empty()&&a[j]>=a[Amin.back()]) Amin.pop_back(); while(!Amax.empty()&&a[j]<=a[Amax.back()]) Amax.pop_back(); Amin.push_back(j); Amax.push_back(j); if(a[Amin.front()]-a[Amax.front()]<=k) j++; else break; } ans+=(j-i); if(Amin.front()==i) Amin.pop_front(); if(Amax.front()==i) Amax.pop_front(); } printf("%d\n",ans); return 0; }
View Code
相关文章推荐
- 51nod 1275 连续子段的差异
- 51Nod-1275-连续子段的差异
- [单调队列] 51Nod 1275 连续子段的差异
- 51nod 1275 连续子段的差异(twopointer+单调队列)
- 51nod 1275:连续子段的差异 单调队列
- 51nod-1275 连续子段的差异(单调队列)
- 【单调队列】51nod 1275 连续子段的差异
- 51 nod 1275 连续子段的差异(单调队列)
- 51nod 1275 连续字段的差异(单调队列)
- 连续子段的差异
- 数组的连续最大子段和
- 51nod 1138 连续整数的和
- 51Nod 1049 最大子段和
- 【51Nod】1138 连续整数的和
- 51nod-1094 和为k的连续区间
- 51nod 1081 子段求和
- 51nod 1049 1050 1051 (循环数组)最大子段(子矩阵)和(dp)
- 51nod-1791-合法括号子段
- 51nod 1049 最大子段和 (动归)
- 51nod--1138 . 连续整数的和