구간 최대공약수

배열에 구간 덧셈과 구간 최대공약수 질의를 처리한다. 차분 배열의 최대공약수와 한 점의 값을 함께 관리한다.

어려움8세그먼트 트리정수론수학아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

자연수 NN개로 이루어진 수열 A1,A2,,ANA_1, A_2, \dots, A_N이 있다. 이 수열에 다음 두 가지 연산을 수행한다.

  • 연속한 구간의 모든 원소에 같은 값을 더한다.
  • 연속한 구간에 있는 원소의 최대공약수를 구한다.

연산을 입력에 주어진 순서대로 처리하고, 최대공약수를 구하는 연산마다 답을 출력하라.

입력

첫째 줄에 수열의 원소 개수 NN이 주어진다. (1N1000001 \le N \le 100000)

둘째 줄에 수열의 원소 NN개가 공백으로 구분되어 주어진다. ii번째 수가 AiA_i이고, 1Ai1091 \le A_i \le 10^9이다.

셋째 줄에 연산의 개수 QQ가 주어진다. (1Q1000001 \le Q \le 100000)

이어지는 QQ개의 줄에 연산이 한 줄에 하나씩 주어진다. 각 줄은 세 정수 TT, AA, BB로 이루어진다.

  • TT가 0이 아니면 AA번째 원소부터 BB번째 원소까지 모든 원소에 TT를 더한다.
  • TT가 0이면 AA번째 원소부터 BB번째 원소까지의 최대공약수를 출력해야 한다.

TT0T1090 \le T \le 10^9이고, AABB1ABN1 \le A \le B \le N을 만족한다. TT가 0인 연산은 하나 이상 주어진다.

출력

TT가 0인 연산마다 그 구간의 최대공약수를 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.