#53. Cắt dãy tối ưu (Mã bài: ARRAY)

Bộ nhớ: 256 MiB Thời gian: 1000 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: So sánh văn bản
Đưa lên bởi: Trùm CUỐI

Đề bài

Cho một dãy số gồm N phần tử. Bạn cần cắt dãy thành các đoạn sao cho tổng giá trị các đoạn là lớn nhất.
Giá trị của một đoạn = (phần tử lớn nhất) – (phần tử nhỏ nhất) trong đoạn.

Q truy vấn, mỗi truy vấn tăng giá trị các phần tử từ chỉ số L đến R lên X đơn vị. Sau mỗi truy vấn, hãy cho biết giá trị lớn nhất có thể của dãy.

Dữ liệu:

  • Dòng đầu: hai số nguyên N, Q ( 1 \le N, Q \le 2 \times 10^5 ).
  • Dòng thứ hai: N số nguyên a[i] ( -10^9 \le a[i] \le 10^9 ).
  • Q dòng tiếp theo: mỗi dòng gồm L, R, X ( 1 \le L \le R \le N, |X| \le 10^9 ).

Kết quả: Ghi ra Q dòng, mỗi dòng là đáp số sau mỗi truy vấn.

Ví dụ:

Dữ liệu:

4 3
1 2 3 4
1 2 1
1 1 2
2 3 1

Kết quả:

2
2
0

Giải thích:

  • Sau truy vấn 1: dãy = [2, 3, 3, 4], giá trị tối ưu = 2.
  • Sau truy vấn 2: dãy = [4, 3, 3, 4], giá trị tối ưu = 2.
  • Sau truy vấn 3: dãy = [4, 4, 4, 4], giá trị tối ưu = 0.

Giới hạn:

  • Subtask #1: 30% số điểm với N, Q \le 200 .
  • Subtask #2: 30% số điểm với N, Q \le 2000 .
  • Subtask #3: 40% số điểm còn lại không có ràng buộc thêm.