OR과 쿼리

수열에 구간 OR 갱신과 K와 같은 값의 개수를 세는 구간 질의를 처리한다.

어려움9세그먼트 트리비트 연산연결 리스트구현아직 제출이 없습니다시간 제한1.5초메모리 제한256 MB

문제

길이가 N인 수열 A1, A2, ..., AN과 음이 아닌 정수 K가 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오.

  • 1 l r x : 모든 l ≤ i ≤ r에 대해, Ai를 Ai ∨ x로 바꾼다. (단, ∨는 bitwise OR 연산이다.)

  • 2 l r : Ai = K를 만족하는 l ≤ i ≤ r의 개수를 출력한다.

수열의 인덱스는 1부터 시작한다.

입력

첫째 줄에 수열의 크기 N (1 ≤ N ≤ 250,000), K (0 ≤ K < 230)가 주어진다.

둘째 줄에는 A1, A2, ..., AN이 주어진다. (0 ≤ Ai < 230)

셋째 줄에는 쿼리의 개수 M (1 ≤ M ≤ 250,000)이 주어진다.

넷째 줄부터 M개의 줄에는 쿼리가 한 줄에 하나씩 주어진다. 2번 쿼리는 하나 이상 주어진다. (1 ≤ l ≤ r ≤ N, 0 ≤ x < 230)

출력

각각의 2번 쿼리마다 정답을 한 줄에 하나씩 출력한다.