Biến đổi modulo đoạn

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1900 Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho mảng \(A\) gồm \(N\) số nguyên dương \(A_1, A_2, \dots, A_N\). Bạn cần thực hiện \(Q\) truy vấn thuộc một trong ba loại sau:

  • \(1 \ l \ r \ x\): Gán \(A_i \leftarrow A_i \bmod x\) với mọi \(i\) thuộc đoạn \([l, r]\).
  • \(2 \ l \ r \ x\): Gán \(A_i \leftarrow x\) với mọi \(i\) thuộc đoạn \([l, r]\).
  • \(3 \ l \ r\): Tính tổng \(\sum_{i=l}^r A_i\).

Đầu vào

  • Dòng đầu tiên chứa hai số nguyên dương \(N\)\(Q\) (\(1 \le N, Q \le 10^5\)).
  • Dòng thứ hai chứa \(N\) số nguyên dương \(A_1, A_2, \dots, A_N\) (\(1 \le A_i \le 10^9\)).
  • \(Q\) dòng tiếp theo, mỗi dòng mô tả một truy vấn theo định dạng nêu trên (\(1 \le l \le r \le N\), \(1 \le x \le 10^9\)).

Đầu ra

  • Với mỗi truy vấn loại 3, in ra một dòng duy nhất chứa kết quả của phép tính.

Giới hạn

  • Trong tất cả các testcase, \(1 \le N, Q \le 10^5\)\(1 \le A_i, x \le 10^9\).

Ví dụ 1

Input
5 5
1 2 3 4 5
1 3 5 3
3 1 5
2 1 3 10
1 2 5 4
3 1 5
Output
6
17
Giải thích
  • Ban đầu mảng \(A = [1, 2, 3, 4, 5]\).
  • Truy vấn 1: Thực hiện modulo cho đoạn \([3, 5]\) với \(x = 3\). Mảng trở thành \([1, 2, 0, 1, 2]\).
  • Truy vấn 2: Tổng đoạn \([1, 5]\)\(1 + 2 + 0 + 1 + 2 = 6\).
  • Truy vấn 3: Gán đoạn \([1, 3]\) bằng \(10\). Mảng trở thành \([10, 10, 10, 1, 2]\).
  • Truy vấn 4: Thực hiện modulo cho đoạn \([2, 5]\) với \(x = 4\). Mảng trở thành \([10, 2, 2, 1, 2]\) (vì \(10 \bmod 4 = 2\), \(1 \bmod 4 = 1\), \(2 \bmod 4 = 2\)).
  • Truy vấn 5: Tổng đoạn \([1, 5]\)\(10 + 2 + 2 + 1 + 2 = 17\).

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.