만드는 중입니다

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

마르스 사과 과수원

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

요약
나무 N그루에 달린 사과의 익음 정도를 관리합니다. 특정 익음 정도 X인 사과를 모두 X+1로 바꾸고, 구간 안에서 익음 정도가 Y 이하인 나무 수를 셉니다.
난이도

어려움10점 중 8점

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

문제

Zaqquat는 마르스에서 사과 과수원을 관리한다. 과수원에는 NN그루의 사과나무가 있다. 나무들은 한 줄로 길게 늘어서 있으며 1…N1 \ldots N으로 번호가 매겨져 있다.

마르스 사과는 다음 규칙에 따라 익는다.

  • 해가 시작될 때 나무 ii의 사과 익음 정도는 ZiZ_i이다.
  • 해가 도는 동안 어느 시점에 익음 정도가 XX인 사과는 모두 한 단계씩 익어 익음 정도가 X+1X + 1이 된다.

Zaqquat는 가끔 LL번부터 RR번까지 나무 중에서 사과 익음 정도가 YY 이하인 나무가 몇 그루인지 알고 싶어 한다.

사과가 익는 과정을 모델링하고 Zaqquat의 질문에 답하는 프로그램을 작성하라.

입력

첫 줄에 나무 수 NN(1≤N≤5000001 \le N \le 500000)과 사건 수 QQ(1≤Q≤5000001 \le Q \le 500000)가 주어진다.

둘째 줄에는 해가 시작될 때 각 나무 사과의 익음 정도 ZiZ_i(1≤Zi≤10000001 \le Z_i \le 1000000)가 공백으로 구분되어 NN개 주어진다.

이후 QQ개의 줄에 사건이 시간 순서대로 주어진다. 각 줄의 첫 값은 사건 종류 TT이다.

  • T=1T = 1이면 정수 XX(1≤X≤15000001 \le X \le 1500000)가 추가로 주어진다. 익음 정도가 XX인 사과가 모두 X+1X + 1이 된다는 뜻이다.
  • T=2T = 2이면 정수 LL, RR, YY(1≤L≤R≤N1 \le L \le R \le N, 1≤Y≤15000001 \le Y \le 1500000)가 추가로 주어진다. LL번부터 RR번까지(양 끝 포함) 나무 중에서 사과 익음 정도가 최대 YY인 나무가 몇 그루인지 묻는다는 뜻이다.

출력

종류가 2인 사건마다 질문에 대한 답을 한 줄에 하나씩, 질문이 주어진 순서대로 출력한다.

예제1

  1. 예제 1

    입력
    7 9
    4 1 2 1 4 4 7
    2 1 4 1
    1 1
    2 1 3 1
    1 1
    1 2
    2 3 5 3
    2 3 5 2
    1 4
    2 2 6 4
    
    예상 출력
    2
    0
    2
    0
    3