수열과 가중 합 쿼리

삽입, 삭제, 교체가 일어나는 수열에서 각 원소에 왼쪽 끝 기준 위치의 k제곱(k는 10 이하)을 곱한 합을 구간별로 계산한다.

어려움8트리이분 탐색누적 합수학아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

길이가 NN인 수열 A0,A1,,AN1A_0, A_1, \dots, A_{N-1}이 주어진다. 모든 원소는 0Ai<2320 \le A_i < 2^{32}를 만족한다. 아래 네 가지 쿼리를 주어진 순서대로 처리하는 프로그램을 작성하시오.

  • 1 p v: ApA_p의 앞에 vv를 삽입한다. pp가 수열의 길이와 같으면 맨 뒤에 붙인다. (0p0 \le p \le 수열의 길이, 0v<2320 \le v < 2^{32})
  • 2 p: ApA_p를 제거한다. (0p<0 \le p < 수열의 길이)
  • 3 p v: ApA_pvv로 바꾼다. (0p<0 \le p < 수열의 길이, 0v<2320 \le v < 2^{32})
  • 4 l r k: (i=lrAi×(il+1)k)mod232\left( \sum_{i=l}^{r} A_i \times (i - l + 1)^k \right) \bmod 2^{32}을 출력한다. (0lr<0 \le l \le r < 수열의 길이, 0k100 \le k \le 10)

삽입이나 삭제가 일어나면 그 뒤에 있던 원소의 번호가 한 칸씩 밀리거나 당겨진다. 쿼리에 주어지는 pp, ll, rr은 그 쿼리를 처리하는 시점의 수열을 기준으로 한다.

4번 쿼리의 가중치 (il+1)k(i - l + 1)^k는 구간의 왼쪽 끝을 1로 세는 상대 위치를 kk제곱한 값이다.

입력

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

둘째 줄에 A0,A1,,AN1A_0, A_1, \dots, A_{N-1}이 공백으로 구분되어 주어진다.

셋째 줄에 쿼리의 개수 MM (1M1000001 \le M \le 100000)이 주어진다.

넷째 줄부터 MM개의 줄에 쿼리가 한 줄에 하나씩 주어진다.

출력

4번 쿼리마다 답을 한 줄에 하나씩 출력한다. 1번, 2번, 3번 쿼리는 아무것도 출력하지 않는다.