Hướng dẫn giải của TS10 - Tiền Giang 2025 - Tìm số lớn nhất

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người làm lời giải.


Nộp code mẫu trước khi tự giải được bài tập là một hành vi có thể bị ban.

Tóm tắt đề

  • Cho dãy số nguyên A gồm n phần tử (A1,A2,...,An) có giá trị ban đầu bằng 0.
  • Cho Q truy vấn dạng (u,v,m) tăng giá trị các phần tử trong đoạn [u,v] lên M.
  • Sau Q truy vấn, tìm số lớn nhất trong mảng A.

Giới hạn bài

  • Subtask 1: Có 70% test: 1≤n, Q≤103
  • Subtask 2: Có 30% test: 103<n Q≤106

Lời giải

Subtask 1: 1≤n, Q≤103
Tiếp cận

Trong Q truy vấn sử dụng vòng for để tăng giá trị các phần tử trong đoạn [u,v] lên M. Kết thúc truy vấn, tìm max trong mảng.

Thực hiện

Với mỗi truy vấn, sử dụng một vòng lặp từ u đến v để tăng giá trị phần tử lên m. Sau Q truy vấn, tìm max trong mảng A.

Độ phức tạp
O(n×q).
Subtask 2: 103<n, Q≤106
Tiếp cận

Với n×Q lớn, cần một cách khác tối ưu hơn để cập nhật giá trị của đoạn [u,v]. Đây là ứng dụng cơ bản của mảng hiệu. Gọi fi là hiệu của Ai với Ai−1. Khi gặp truy vấn (u,v,m) thì chỉ có hiệu của Au và Au−1 hiệu của Av và Av+1 thay đổi, cụ thể là fu tăng lên m và fv+1 giảm đi m. Kết thúc truy vấn, tìm max trong mảng.

Thực hiện

Với mỗi truy vấn, tăng fu lên m và giảm fv+1 đi m. Sau đó, cộng dồn mảng diff để tìm được từng Ai, tìm max.

Độ phức tạp

O(n).


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.

Hỗ Trợ CLAOJ
QR Code