HDU 3530 Subsequences(单调队列)

解题思路:

开两个单调队列即可。

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cstdlib>#include <vector>#include <queue>#include <stack>#include <set>#include <map>#define LL long long using namespace std;const int maxn = 100000 + 10;int A[maxn];int Q1[maxn];int Q2[maxn];int P1[maxn];int P2[maxn];int Min[maxn];int Max[maxn];int N, M, K;int main(){while(scanf("%d%d%d", &N, &M, &K)!=EOF){for(int i=1;i<=N;i++)scanf("%d", &A[i]);int head1 = 1, tail1 = 0;int head2 = 1, tail2 = 0;int now = 0, ans = 0;for(int i=1;i<=N;i++){while(head1 <= tail1 && A[P1[tail1]] <= A[i])tail1–;P1[++tail1] = i;while(head2 <= tail2 && A[P2[tail2]] >= A[i])tail2–;P2[++tail2] = i;while(A[P1[head1]] – A[P2[head2]] > K){if(P1[head1] < P2[head2])now = P1[head1++];elsenow = P2[head2++];}if(A[P1[head1]] – A[P2[head2]] >= M)ans = max(ans, i – now);}printf("%d\n", ans);}return 0;}

,当你开展的事业从事的行动穷途末路大势已去的时候,

HDU 3530 Subsequences(单调队列)

相关文章:

你感兴趣的文章:

标签云: