만드는 중입니다

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

계단 수열과 쿼리

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

요약
정수 수열에 구간 덧셈이 주어질 때, 구간 안에서 인접한 차이가 모두 k인 가장 긴 연속 부분 수열의 길이를 구합니다.
난이도

보통10점 중 5점

유형
세그먼트 트리, 배열
정답자
아직 제출이 없습니다

문제

임의의 양의 정수 KK에 대해, 인접한 모든 수의 차이가 KK인 수열을 KK-계단 수열이라고 한다. 예를 들어 [4,5,6,5,6][4,5,6,5,6]은 인접한 수의 차이가 모두 1이므로 11-계단 수열이다. 또 [17,12,17,22,27][17,12,17,22,27]은 인접한 수의 차이가 모두 5이므로 55-계단 수열이다. 길이가 1인 수열은 모든 KK-계단 수열에 포함된다.

길이가 NN인 수열 a1,a2,⋯ ,aNa_1, a_2, \cdots, a_N이 주어질 때, 다음 쿼리를 처리하는 프로그램을 작성하시오.

  • 1 i j x: 현재 수열의 ii번째 원소부터 jj번째 원소까지 각각 xx를 더한다.
  • 2 i j k: i≤l≤r≤ji \le l \le r \le j이고 al,al+1,⋯ ,ara_l, a_{l+1}, \cdots, a_r이 kk-계단 수열일 때, r−l+1r-l+1의 최댓값을 출력한다.

입력

첫째 줄에 NN (1≤N≤100,0001 \le N \le 100,000)과 쿼리의 개수 QQ (1≤Q≤100,0001 \le Q \le 100,000)가 공백으로 구분되어 주어진다.

둘째 줄에 정수 a1,a2,⋯ ,aNa_1, a_2, \cdots, a_N (−10,000≤ai≤10,000-10,000 \le a_i \le 10,000)이 공백으로 구분되어 주어진다.

셋째 줄부터 QQ개의 줄에 쿼리가 주어진다. 각 쿼리는 네 정수로 이루어져 있으며, 1 i j x (1≤i≤j≤N1 \le i \le j \le N, −1,000≤x≤1,000-1,000 \le x \le 1,000) 또는 2 i j k (1≤i≤j≤N1 \le i \le j \le N, 1≤k≤101 \le k \le 10)이다.

2번 쿼리는 적어도 하나 주어진다.

출력

2번 쿼리가 주어질 때마다 그 결과를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    5 8
    6 4 6 5 3
    2 1 5 1
    1 1 2 1
    2 1 5 2
    2 2 3 2
    1 3 5 1
    1 4 5 -1
    2 2 5 2
    2 3 3 8
    
    예상 출력
    2
    2
    1
    4
    1