만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

GCD SUM

시간 제한5초메모리 제한1024 MB

요약
수열이 주어지면 구간 [l, r] 안의 모든 연속 부분수열에 대한 gcd 합을 구합니다. 각 질의의 l, r은 이전 답과 XOR로 암호화되어 주어집니다.
난이도

보통10점 중 7점

유형
세그먼트 트리, 정수론, 분할 정복
정답자
아직 제출이 없습니다

문제

길이가 NN인 수열 a1,a2,⋯ ,aNa_{1}, a_{2}, \cdots, a_{N}이 주어진다. 다음 쿼리를 수행하는 프로그램을 작성하시오.

  • ll rr: al,al+1,⋯ ,ara_{l}, a_{l+1}, \cdots, a_{r}의 모든 연속 부분 수열에 대한 gcd⁡\gcd의 합을 출력한다. 즉, ∑i=lr∑j=irgcd⁡(ai,ai+1,⋯ ,aj)\sum_{i=l}^{r}\sum_{j=i}^{r}\gcd(a_{i}, a_{i+1}, \cdots, a_{j})을 출력한다.

모든 입력 데이터에서 aa의 모든 연속 부분 수열의 gcd⁡\gcd의 합은 101810^{18}을 넘지 않는다.

입력

첫째 줄에 정수 NN이 주어진다.

둘째 줄에 정수 a1,a2,⋯ ,aNa_{1}, a_{2}, \cdots, a_{N}이 주어진다.

셋째 줄에 쿼리의 개수 QQ가 주어진다.

이후 QQ개의 줄에 쿼리 정보가 주어진다. ii번째 줄에는 정수 xix_{i}와 yiy_{i}가 주어진다. ii번째 쿼리에서 ll과 rr의 값을 각각 lil_{i}, rir_{i}라 하면 li=xi⊕ansi−1l_{i} = x_{i} \oplus ans_{i-1}, ri=yi⊕ansi−1r_{i} = y_{i} \oplus ans_{i-1}이다. 여기서 ⊕\oplus는 비트 단위 XOR 연산이다. i=0i=0이면 ans0=0ans_{0}=0이고, i≥1i \ge 1이면 ansians_{i}는 ii번째 쿼리의 답이다.

출력

QQ개의 수를 한 줄에 하나씩 출력한다. ii번째 줄에는 ii번째 쿼리의 답을 출력한다.

제한

  • 1≤N≤500 0001 \le N \le 500\,000
  • 1≤ai≤1091 \le a_{i} \le 10^{9} (1≤i≤N)(1 \le i \le N)
  • 1≤Q≤100 0001 \le Q \le 100\,000
  • 0≤xi,yi<2600 \le x_{i}, y_{i} < 2^{60} (1≤i≤Q)(1 \le i \le Q)
  • aa의 모든 연속 부분 수열의 gcd⁡\gcd의 합은 101810^{18}을 넘지 않는다.
  • 1≤li≤ri≤N1 \le l_i \le r_i \le N (1≤i≤Q)(1 \le i \le Q)

예제1

  1. 예제 1

    입력
    5
    3 6 4 8 2
    3
    1 5
    40 40
    6 0
    
    예상 출력
    43
    4
    26