cpp-007Đọc toàn bộ đề miễn phí

Mảng cộng dồn và truy vấn đoạn con

Một máy chủ xử lý dữ liệu AI của AI Empire ghi nhận lượng gói tin xử lý trong N giây liên tiếp thành một dãy số nguyên không âm A1, A2, …, AN (0 ≤ Ai ≤ 109).

C++Trung bình35 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

vectorsprefix sumtwo pointersfast io

Kiến thức tiên quyết: std vector, prefix sum, loops.

Nội dung đề bài

Mục tiêu kiến thức

  • Xây dựng và sử dụng mảng cộng dồn (Prefix Sum Array) để trả lời mỗi truy vấn tổng đoạn con trong thời gian O(1).
  • Kỹ thuật hai con trỏ (Two Pointers) để tìm độ dài đoạn con liên tiếp dài nhất thỏa mãn điều kiện tổng ≤ S trong thời gian O(N).
  • Tối ưu hóa nhập xuất (Fast I/O) khi làm việc với dữ liệu lớn (N, Q ≤ 105).
  • Sử dụng kiểu dữ liệu 64-bit long long tránh tràn số khi cộng dồn.

Mô tả bài toán

Một máy chủ xử lý dữ liệu AI của AI Empire ghi nhận lượng gói tin xử lý trong N giây liên tiếp thành một dãy số nguyên không âm A1, A2, …, AN (0 ≤ Ai ≤ 109).

Hệ thống cần bạn giải quyết hai bài toán giám sát:

  • Tìm khoảng thời gian tải ổn định: Tìm độ dài lớn nhất K của một đoạn con liên tiếp các giây [i, j] sao cho tổng lượng gói tin trong đoạn đó không vượt quá ngưỡng S cho trước: ∑k=ij Ak ≤ S. Nếu mọi phần tử đều lớn hơn S, độ dài lớn nhất là 0.
  • Xử lý Q truy vấn kiểm tra: Cho Q truy vấn, mỗi truy vấn gồm 2 chỉ số L và R (1 ≤ L ≤ R ≤ N), hãy in ra tổng lượng gói tin từ giây thứ L đến giây thứ R: ∑k=LR Ak.

Quy ước nộp bài

  • Chỉ cần viết một chương trình đọc stdin và in ra stdout. Bài này không yêu cầu viết hàm.
  • Không dùng cout để in lời nhắc trước khi đọc dữ liệu. Lời nhắc sẽ lọt vào stdout và làm bài sai.
  • Chỉ in đúng nội dung ở mục Output. Không in thêm nhãn, dòng trống hay ký tự thừa.
  • Output được so khớp từng ký tự, phân biệt chữ hoa/thường và dấu câu.

Input

  • Dòng 1: Gồm 3 số nguyên N, Q, S (1 ≤ N, Q ≤ 105, 0 ≤ S ≤ 1014).
  • Dòng 2: Gồm N số nguyên không âm A1, A2, …, AN (0 ≤ Ai ≤ 109).
  • Q dòng tiếp theo: Mỗi dòng gồm 2 số nguyên L, R (1 ≤ L ≤ R ≤ N).

Output

  • Dòng 1: In một số nguyên duy nhất là độ dài đoạn con liên tiếp dài nhất có tổng ≤ S.
  • Q dòng tiếp theo: Mỗi dòng in một số nguyên là kết quả tổng của đoạn con [L, R] tương ứng.

Ràng buộc

  • 1 ≤ N, Q ≤ 105.
  • 0 ≤ Ai ≤ 109.
  • 0 ≤ S ≤ 1014.
  • 1 ≤ L ≤ R ≤ N.
  • Thời gian chạy: 1000ms.
  • Bộ nhớ tối đa: 256MB.

Ví dụ 1

Input

5 3 10
2 3 1 4 2
1 3
2 4
1 5

Output

4
6
8
12

Giải thích

  • Đoạn dài nhất có tổng ≤ 10 là đoạn gồm 4 phần tử đầu tiên [2, 3, 1, 4] với tổng 2 + 3 + 1 + 4 = 10 ≤ 10. Độ dài = 4.
  • Truy vấn 1: [1, 3] → 2 + 3 + 1 = 6.
  • Truy vấn 2: [2, 4] → 3 + 1 + 4 = 8.
  • Truy vấn 3: [1, 5] → 2 + 3 + 1 + 4 + 2 = 12.
3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.