Điểm:
2000 (p)
Thời gian:
1.0s
Bộ nhớ:
512M
Input:
QUERYSUMS.inp
Output:
QUERYSUMS.out
Cho dãy \(a\) gồm \(n\) phần tử được đánh chỉ số từ \(1\) đến \(n\) và \(q\) truy vấn. Mỗi truy vấn thuộc một trong hai loại sau:
- Tăng các phần tử từ chỉ số \(l\) đến \(r\) thêm \(x\).
- Tìm giá trị lớn nhất của biểu thức \(a_{i_1} - a_{i_2} + a_{i_3} - a_{i_4} + \ldots\) với \(i_1, i_2, i_3, i_4, \ldots\) là các chỉ số được chọn thỏa mãn \(l \leq i_1 < i_2 < i_3 < i_4 < \ldots \leq r\). Nếu không chọn chỉ số nào thì giá trị của biểu thức là \(0\).
Input
- Dòng đầu tiên chứa hai số nguyên \(n\) và \(q\) (\(1 \leq n, q \leq 10 ^ 5\)).
- Dòng tiếp theo chứa \(n\) số nguyên \(a_1, a_2, \ldots, a_n\) (\(|a_i| \leq 10 ^ 9\)).
- Trong \(q\) dòng tiếp theo, mỗi dòng chứa số nguyên \(1\) hoặc \(2\). Số \(1\) theo sau bởi ba số nguyên \(l\), \(r\) và \(x\) (\(1 \leq l \leq r \leq n\), \(|x| \leq 10 ^ 9\)) mô tả truy vấn loại 1. Số \(2\) theo sau bởi hai số nguyên \(l\) và \(r\) (\(1 \leq l \leq r \leq n\)) mô tả truy vấn loại 2.
Output
- Với mỗi truy vấn loại 2, in ra giá trị lớn nhất của biểu thức trên một dòng.
Scoring
- Subtask 1 (30% số điểm): \(n, q \leq 20\).
- Subtask 2 (30% số điểm): \(n, q \leq 10 ^ 3\).
- Subtask 3 (30% số điểm): Truy vấn loại 1 có \(l = r\).
- Subtask 4 (10% số điểm): Không có ràng buộc gì thêm.
Example
Test 1
Input
5 5
9 3 -2 5 -1
2 1 3
1 4 5 6
2 2 5
1 2 2 -7
2 2 3
Output
11
16
0
Note
- Ban đầu, dãy \(a\) là \([9, 3, -2, 5, -1]\).
- Ở truy vấn thứ nhất, cách tối ưu là chọn các chỉ số \(i_1 = 1\) và \(i_2 = 3\). Khi đó, giá trị của biểu thức là \(a_1 - a_3 = 11\).
- Ở truy vấn thứ hai, sau khi tăng các phần tử từ chỉ số \(4\) đến \(5\) thêm \(6\), ta được dãy \(a\) mới là \([9, 3, -2, 11, 5]\).
- Ở truy vấn thứ ba, cách tối ưu là chọn các chỉ số \(i_1 = 2\), \(i_2 = 3\) và \(i_3 = 4\). Khi đó, giá trị của biểu thức là \(a_2 - a_3 + a_4 = 16\).
- Ở truy vấn thứ tư, sau khi tăng các phần tử từ chỉ số \(2\) đến \(2\) thêm \(-7\), ta được dãy \(a\) mới là \([9, -4, -2, 11, 5]\).
- Ở truy vấn thứ năm, cách tối ưu là không chọn chỉ số nào. Khi đó, giá trị của biểu thức là \(0\).
Bình luận
Thuật toán
Sử dụng ma trận \(\begin{pmatrix}0 & x\\ -x & 0\end{pmatrix}\) với nhân ma trận \((max,+)\). Kết quả là giá trị lớn nhất trong cột thứ 2 sau khi nhân (theo thứ tự ngược lại) các ma trận từ l đến r.