canuc80k0201·2/50

Tổng Trên Đoạn Cố Định

Nộp bài trên LQDOJ

Bài 02 · Prefix Sum

Cho một dãy gồm số nguyên dương. Dãy không thay đổi trong suốt quá trình xử lý. Bạn cần trả lời truy vấn; mỗi truy vấn yêu cầu tổng các phần tử từ vị trí đến vị trí , tính cả hai đầu mút.

Input

  • Dòng đầu chứa hai số nguyên và .
  • Dòng thứ hai chứa số nguyên .
  • Mỗi trong dòng tiếp theo chứa hai số nguyên và .

Output

  • Với mỗi truy vấn, in tổng trên một dòng.

Constraints

  • .
  • .
  • .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

7 4
4 2 7 1 3 5 6
1 1
2 5
4 7
1 7

Output

4
13
15
28

Giải thích: Bốn đoạn có tổng lần lượt là và tổng cả dãy bằng .

Lời giải tóm tắt
  • Ý tưởng: Xây dựng mảng tổng tiền tố P, trong đó P_0 = 0 và P_i = x_1 + x_2 + ... + x_i. Tổng của đoạn đóng [l, r] là
  • Ý tưởng: P_r - P_{l-1}.
  • Ý tưởng: Các tổng có thể lớn hơn miền số nguyên 32 bit, nên dùng số nguyên 64 bit.
  • Chứng minh đúng: P_r chứa tổng của các phần tử từ 1 đến r, còn P_{l-1} chứa đúng phần đứng trước đoạn truy vấn. Khi trừ hai giá trị, mọi phần tử từ 1 đến l-1 bị triệt tiêu và chỉ còn x_l + ... + x_r. Do đó công thức trả lời đúng từng truy vấn.
  • Độ phức tạp: Tiền xử lý O(n), mỗi truy vấn O(1), tổng thời gian O(n+q) và bộ nhớ O(n).