Cửa sổ trượt (Sliding Window Maximum)
Xem dạng PDF
Gửi bài giải
Điểm:
1000,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Input:
stdin
Output:
stdout
Nguồn bài:
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch
Cho một mảng ~A~ gồm ~N~ số nguyên và một số nguyên dương ~K~. Một "cửa sổ" có kích thước ~K~ trượt từ trái sang phải qua mảng ~A~. Mỗi lần cửa sổ dịch chuyển sang phải 1 vị trí. Tại bất kỳ thời điểm nào, bạn chỉ có thể nhìn thấy đúng ~K~ phần tử nằm trong cửa sổ.
Hãy tìm và in ra giá trị lớn nhất trong cửa sổ tại mỗi bước trượt.
Dữ liệu
- Dòng đầu tiên chứa hai số nguyên dương ~N~ và ~K~ (~1 \le K \le N \le 10^5~).
- Dòng thứ hai chứa ~N~ số nguyên ~A[1], A[2], ..., A[N]~ (~-10^9 \le A[i] \le 10^9~), phân cách nhau bởi khoảng trắng.
Kết quả
In ra một dòng duy nhất chứa ~N - K + 1~ số nguyên. Số thứ ~i~ là giá trị lớn nhất của mảng trong khung cửa sổ bắt đầu từ vị trí ~i~ đến vị trí ~i + K - 1~.
Ví dụ
Input
8 3
1 3 -1 -3 5 3 6 7
Output
3 3 5 5 6 7
Giải thích
Các cửa sổ trượt lần lượt như sau:
[1 3 -1]-3 5 3 6 7 => Max là3- 1
[3 -1 -3]5 3 6 7 => Max là3 - 1 3
[-1 -3 5]3 6 7 => Max là5 - 1 3 -1
[-3 5 3]6 7 => Max là5 - 1 3 -1 -3
[5 3 6]7 => Max là6 - 1 3 -1 -3 5
[3 6 7]=> Max là7
Bình luận