Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <cstdio>
- using namespace std;
- const int maxn = 1e6 + 10;
- int n, A, B, a[maxn], Q1[maxn], Q2[maxn];
- void solve() {
- for (int i = 1; i <= n; i++) {
- scanf("%d", a + i);
- }
- int now = 1, ans = 0;
- int l1 = 1, r1 = 1, l2 = 1, r2 = 1;
- for (int i = 1; i <= n; i++) {
- while (l1 <= r1 && a[Q1[r1]] < a[i]) r1--;
- while (l2 <= r2 && a[Q2[r2]] > a[i]) r2--;
- Q1[++r1] = i, Q2[++r2] = i;
- while (l1 <= r1 && l2 <= r2 && a[Q1[l1]] - a[Q2[l2]] > B) {
- now = Q1[l1] < Q2[l2] ? Q1[l1++] + 1 : Q2[l2++] + 1;
- }
- if (l1 <= r1 && l2 <= r2 && a[Q1[l1]] - a[Q2[l2]] >= A) {
- ans = max(ans, i - now + 1);
- }
- }
- printf("%d\n", ans);
- }
- int main() {
- while (~scanf("%d %d %d", &n, &A, &B)) {
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement