아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

균형 잡힌 시소 배열

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

요약
구간 더하기와 구간 덮어쓰기 연산이 주어질 때, 질의 구간이 균형 시소 배열인지 판별합니다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 수학, 누적 합
정답자
아직 제출이 없습니다

문제

Bob은 시소를 즐겨 탄다. 시소가 좌우로 기울지 않고 균형을 이루는 상태를 특히 재미있게 생각한다. 시소를 탄 뒤 Bob은 균형 잡힌 시소 배열과 관련된 문제를 떠올린다.

길이가 mm인 배열을 A=[a1,a2,…,am]A = [a_1, a_2, \dots, a_m]이라고 하자. 어떤 정수 kk (1≤k≤m1 \le k \le m)가 존재하여 ∑i=1m(i−k)ai=0\sum_{i=1}^{m}(i-k)a_i = 0이 성립하면, AA는 균형 잡힌 시소 배열이다.

Bob은 생일 선물로 배열 A=[a1,a2,…,an]A = [a_1, a_2, \dots, a_n]을 받았다. 그는 공백이 아닌 연속 부분 배열 중에 균형 잡힌 시소 배열이 있는지 알고 싶어 한다. 구체적으로 1≤ℓ≤r≤n1 \le \ell \le r \le n을 만족하는 주어진 (ℓ,r)(\ell, r)에 대해 [aℓ,…,ar][a_\ell, \dots, a_r]이 균형 잡힌 시소 배열인지 묻는다. 배열의 원소는 시간에 따라 다음 두 종류의 변경을 거친다.

  1. aℓ,…,ara_\ell, \dots, a_r 각각에 xx를 더한다.
  2. aℓ,…,ara_\ell, \dots, a_r 각각을 xx로 바꾼다.

먼저 배열 AA가 주어진다. 이후 아래 세 가지 유형 중 하나의 연산이 qq번 주어진다.

  • 1 l r x: aℓ,…,ara_\ell, \dots, a_r 각각에 xx를 더한다.
  • 2 l r x: aℓ,…,ara_\ell, \dots, a_r 각각을 xx로 바꾼다.
  • 3 l r: [aℓ,…,ar][a_\ell, \dots, a_r]이 균형 잡힌 시소 배열인지 확인한다.

입력

첫 번째 줄에 배열의 길이 nn과 연산의 개수 qq가 주어진다. 두 번째 줄에는 nn개의 정수 aia_i가 주어진다. 이어지는 qq개의 줄은 각각 위에서 설명한 연산 하나를 나타낸다.

출력

유형 3의 연산마다 해당 부분 배열이 균형 잡힌 시소 배열이면 Yes, 아니면 No를 출력한다.

제한

  • 1≤n≤1000001 \le n \le 100000
  • 1≤q≤12000001 \le q \le 1200000
  • −1000≤ai≤1000-1000 \le a_i \le 1000
  • −10000≤x≤10000-10000 \le x \le 10000
  • 1≤i≤n1 \le i \le n에 대해, 어떤 연산 이후에도 ∣ai∣≤1.5×109|a_i| \le 1.5 \times 10^9이라고 가정해도 된다.
  • 1≤ℓ≤r≤n1 \le \ell \le r \le n

예제1

  1. 예제 1

    입력
    3 6
    1 2 3
    3 1 1
    3 1 3
    1 1 1 2
    3 1 3
    2 2 2 0
    3 2 3
    
    예상 출력
    Yes
    No
    Yes
    Yes