#5212. RANGEGCD - Ước chung lớn nhất trên đoạn

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ố nguyên dương a gồm n phần tử. Thực hiện q thao tác, gồm hai loại:

  1. update idx val: Thay đổi giá trị a_{idx} thành val .
  2. query L R: Tìm ước số chung lớn nhất (GCD) của tất cả các phần tử trong đoạn con a[L \dots R] .

Dữ liệu:

  • Dòng đầu tiên gồm hai số nguyên n q ( 1 \le n \le 10^5 , 1 \le q \le 10^5 ) - số lượng phần tử và số lượng thao tác.
  • Dòng thứ hai gồm n số nguyên dương a_i ( 1 \le a_i \le 10^9 ) - các phần tử của dãy.
  • q dòng tiếp theo, mỗi dòng mô tả một thao tác:
    • update idx val ( 1 \le idx \le n , 1 \le val \le 10^9 ).
    • query L R ( 1 \le L \le R \le n ).

Kết quả: Với mỗi thao tác query, in ra một dòng duy nhất chứa ước chung lớn nhất của các phần tử trong đoạn từ L đến R .

Ví dụ:

Dữ liệu:

5 5
12 18 24 30 36
query 1 3
update 2 27
query 2 4
update 4 42
query 1 5

Kết quả:

6
3
6

Giải thích:

  • query 1 3: \gcd(12, 18, 24) = 6 .
  • update 2 27: a[2] được cập nhật thành 27.
  • query 2 4: \gcd(27, 24, 30) = 3 .
  • update 4 42: a[4] được cập nhật thành 42.
  • query 1 5: \gcd(12, 27, 24, 42, 36) = 3 .

Giới hạn:

  • 1 \le n \le 10^5
  • 1 \le q \le 10^5
  • 1 \le a_i \le 10^9
  • 1 \le idx \le n , 1 \le val \le 10^9
  • 1 \le L \le R \le n