Advertisement
Guest User

Juanzhang

a guest
Jun 4th, 2019
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.79 KB | None | 0 0
  1. #include <algorithm>
  2. #include <cstdio>
  3. using namespace std;
  4.  
  5. const int maxn = 1e6 + 10;
  6. int n, A, B, a[maxn], Q1[maxn], Q2[maxn];
  7.  
  8. void solve() {
  9.   for (int i = 1; i <= n; i++) {
  10.     scanf("%d", a + i);
  11.   }
  12.   int now = 1, ans = 0;
  13.   int l1 = 1, r1 = 1, l2 = 1, r2 = 1;
  14.   for (int i = 1; i <= n; i++) {
  15.     while (l1 <= r1 && a[Q1[r1]] < a[i]) r1--;
  16.     while (l2 <= r2 && a[Q2[r2]] > a[i]) r2--;
  17.     Q1[++r1] = i, Q2[++r2] = i;
  18.     while (l1 <= r1 && l2 <= r2 && a[Q1[l1]] - a[Q2[l2]] > B) {
  19.       now = Q1[l1] < Q2[l2] ? Q1[l1++] + 1 : Q2[l2++] + 1;
  20.     }
  21.     if (l1 <= r1 && l2 <= r2 && a[Q1[l1]] - a[Q2[l2]] >= A) {
  22.       ans = max(ans, i - now + 1);
  23.     }
  24.   }
  25.   printf("%d\n", ans);
  26. }
  27.  
  28. int main() {
  29.   while (~scanf("%d %d %d", &n, &A, &B)) {
  30.     solve();
  31.   }
  32.   return 0;
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement