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:
HungTV
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

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.