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

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

OR과 쿼리

시간 제한1.5초메모리 제한256 MB

요약
배열에 구간 비트 OR 갱신을 적용하면서, 주어진 구간에서 값이 K인 위치의 개수를 센다.
난이도

어려움10점 중 9점

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

문제

길이가 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번 쿼리마다 정답을 한 줄에 하나씩 출력한다.

예제3

  1. 예제 1

    입력
    5 3
    1 2 3 4 5
    3
    2 1 5
    1 1 3 2
    2 1 5
    
    예상 출력
    1
    2
    
  2. 예제 2

    입력
    7 7
    7 4 2 5 7 5 4
    5
    2 1 7
    1 2 4 7
    2 1 7
    1 6 7 3
    2 1 7
    
    예상 출력
    2
    5
    7
    
  3. 예제 3

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