수열과 쿼리 19

수열에 구간 덧셈, 구간 d로 나눈 몫으로 치환을 적용하고 구간 최솟값과 구간 합을 구한다.

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

문제

길이가 nn인 수열 A0,A1,,An1A_0, A_1, \dots, A_{n-1}이 있다. 다음 네 가지 쿼리를 처리하는 프로그램을 작성하시오.

  • 1 l r c: lirl \le i \le r인 모든 AiA_icc를 더한다.
  • 2 l r d: lirl \le i \le r인 모든 AiA_iAi/d\lfloor A_i / d \rfloor로 바꾼다.
  • 3 l r: lirl \le i \le r인 모든 AiA_i 중에서 가장 작은 값을 출력한다.
  • 4 l r: lirl \le i \le r인 모든 AiA_i의 합을 출력한다.

x\lfloor x \rfloorxx 이하의 정수 중 가장 큰 값이다. 예를 들어 2.5=3\lfloor -2.5 \rfloor = -3이고, 7=7\lfloor -7 \rfloor = -7이다.

입력

첫째 줄에 수열의 크기 nn과 쿼리의 개수 qq가 주어진다. (1n,q1000001 \le n, q \le 100\,000)

둘째 줄에 A0,A1,,An1A_0, A_1, \dots, A_{n-1}이 주어진다. (109Ai109-10^9 \le A_i \le 10^9)

다음 qq개 줄에 쿼리가 한 줄에 하나씩 주어진다. (0lrn10 \le l \le r \le n-1, 104c104-10^4 \le c \le 10^4, 2d1092 \le d \le 10^9)

출력

3번 쿼리와 4번 쿼리가 주어질 때마다 답을 한 줄에 하나씩 출력한다.