Cho dãy số nguyên a1,a2,…,an và số nguyên không âm k. Một đoạn liên tiếp [l,r] được gọi là ổn định nếu hiệu giữa phần tử lớn nhất và phần tử nhỏ nhất trong đoạn không vượt quá k.
Hãy tìm độ dài lớn nhất của một đoạn ổn định và liệt kê tất cả các đoạn có đúng độ dài lớn nhất đó. Các đoạn phải được in theo thứ tự tăng dần của đầu trái.
Input
Dòng đầu chứa hai số nguyên n và k.
Dòng thứ hai chứa n số nguyên a1,a2,…,an.
Output
Dòng đầu in hai số nguyên L và c, trong đó L là độ dài lớn nhất và c là số đoạn ổn định có độ dài L.
Mỗi dòng trong c dòng tiếp theo in hai đầu mút l và r của một đoạn, theo thứ tự tăng dần của l.
Constraints
1≤n≤105.
0≤k≤106.
1≤ai≤106.
Scoring
Subtask 1 (50% số điểm): n≤200.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
9 2
4 6 5 9 8 7 1 2 3
Output
3 3
1 3
4 6
7 9
Giải thích: Ba đoạn được in có biên độ lần lượt là 2,2 và 2, còn mọi đoạn dài 4 đều có biên độ lớn hơn 2. Vì vậy độ dài tối ưu là 3 và có đúng ba đoạn đạt được độ dài này.
Lời giải tóm tắt
Phân tích: Với đầu trái l cố định, khi tăng đầu phải r, giá trị lớn nhất của đoạn không giảm và giá trị nhỏ nhất không tăng. Vì vậy biên độ max-min không giảm, tạo một điều kiện đơn điệu để tìm đầu phải xa nhất.
Thuật toán: Xây hai Sparse Table cho minimum và maximum. Với từng l, tìm kiếm nhị phân đầu phải lớn nhất sao cho hiệu hai truy vấn không vượt k. So sánh độ dài nhận được với kỷ lục toàn cục: nếu lớn hơn thì xóa danh sách cũ, nếu bằng thì thêm đoạn. Duyệt l tăng dần nên danh sách tự có đúng thứ tự yêu cầu.
Chứng minh tính đúng đắn: Hai Sparse Table trả đúng minimum và maximum của mọi đoạn. Tính đơn điệu của biên độ bảo đảm tìm kiếm nhị phân tìm đúng đoạn ổn định dài nhất bắt đầu tại mỗi l. Mọi đoạn tối ưu có một đầu trái đã được duyệt, và thuật toán giữ đúng tất cả các đoạn có độ dài bằng giá trị lớn nhất toàn cục.
Độ phức tạp: Thời gian O(n log n) và bộ nhớ O(n log n).