구간 합 최대 2

점 갱신이 있는 수열에서 구간마다 U 곱하기 부분합 더하기 V 곱하기 (길이 빼기 1)의 최댓값을 구한다.

어려움8세그먼트 트리분할 정복동적 계획법수학아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

길이가 NN인 정수 수열 K1,K2,,KNK_1, K_2, \ldots, K_N과 상수 UU, VV가 주어진다.

쿼리 QQ개가 주어지며, 종류는 두 가지다.

  1. AA, BB가 주어지면 AijBA \le i \le j \le B인 모든 (i,j)(i, j)에 대해 U×(Ki+Ki+1++Kj)+V×(ji)U \times (K_i + K_{i+1} + \cdots + K_j) + V \times (j - i)의 최댓값을 구한다.
  2. AA, BB가 주어지면 KAK_A의 값을 BB로 바꾼다.

입력

첫째 줄에 정수 NN, QQ, UU, VV가 주어진다. (1N,Q1051 \le N, Q \le 10^5, 5U,V5-5 \le U, V \le 5)

둘째 줄에 정수 K1,K2,,KNK_1, K_2, \ldots, K_N이 주어진다. (100Ki100-100 \le K_i \le 100)

셋째 줄부터 QQ개의 줄에 걸쳐 쿼리가 한 줄에 하나씩 주어진다. 각 줄에는 세 정수 CC, AA, BB가 주어진다. (0C10 \le C \le 1)

CC가 0이면 첫 번째 종류의 쿼리이고, 아니면 두 번째 종류의 쿼리다. 첫 번째 종류의 쿼리에서는 1ABN1 \le A \le B \le N이다. 두 번째 종류의 쿼리에서는 1AN1 \le A \le N, 100B100-100 \le B \le 100이다.

출력

첫 번째 종류의 쿼리마다 그 결과를 한 줄에 하나씩 주어진 순서대로 출력한다.