Gửi bài giải
Điểm:
800 (OI)
Giới hạn thời gian:
25.0s
Giới hạn bộ nhớ:
1G
Input:
stdin
Output:
stdout
Dạng bài
Cho một dãy gồm ~N~ số ~a_1, a_2, ... , a_N~. Bạn cần thực hiện ~Q~ thao tác truy vấn / cập nhật sau:
- ~\texttt{1 l r v}~: Lấy một đoạn số ~[l, r]~, tăng mỗi số lên ~v~ đơn vị. Nói cách khác, với mọi ~i \in [l, r]~ gán ~a_i := a_i+v~.
- ~\texttt{2 l r}~: Tính giá trị của biểu thức ~\sum_{i=l}^{r}{f(a_i)} \mod 998244353~.
Trong đó ~f(x) = A^x \times x^B~ với ~A, B~ được cho trước.
~\texttt{Input}~
- Dòng ~1~: chứa ba số nguyên ~N, Q, A, B~.
- Dòng ~2~: chứa ~N~ số nguyên dương ~a_1, a_2, ... , a_N~.
- Dòng ~3 \rightarrow Q + 2~: mỗi dòng mô tả một thao tác cập nhật hoặc truy vấn, có dạng như đã miêu tả ở trên.
~\texttt{Output}~
- Gồm một số dòng chứa đáp án của các truy vấn loại ~2~.
~\texttt{Constraint}~
- ~N, Q \leq 10^5~.
- ~A, B \leq 20~.
- ~v \leq 10^9~.
~\texttt{Sample Input}~
5 7 1 1
5 9 10 2 1
1 2 3 8
1 1 5 7
2 3 5
1 3 5 4
1 3 5 4
1 4 5 2
2 3 4
~\texttt{Sample Output}~
42
52
~\texttt{Subtask}~
- Các test được sinh và sắp xếp theo thứ tự hoàn toàn ngầu nhiên.
Bình luận