만드는 중입니다

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

고전 자료구조 문제

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

요약
길이가 2^m인 배열에 구간 갱신 n개를 차례로 적용합니다. 원소가 증가할 때마다 x도 그만큼 커지며, 최종 x를 2^30으로 나눈 나머지를 출력합니다.
난이도

어려움10점 중 9점

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

문제

길이가 2m2^m인 정수 배열 A=[a0,a1,…,a2m−1]A = [a_0, a_1, \ldots, a_{2^m-1}]이 있다. 처음에는 모든 원소가 0이다.

정수 변수 xx도 있으며, 처음에 x=0x = 0이다.

각 i=1,2,…,ni = 1, 2, \ldots, n에 대해 정수 pip_i와 qiq_i가 주어지고, 다음 과정을 수행한다.

  • p′=(pi+x) mod 2mp' = (p_i + x) \bmod 2^m, q′=(qi+x) mod 2mq' = (q_i + x) \bmod 2^m으로 둔다.
  • l=min⁡(p′,q′)l = \min(p', q'), r=max⁡(p′,q′)r = \max(p', q')로 둔다.
  • j=l,l+1,…,rj = l, l+1, \ldots, r 각각에 대해 aja_j에 ii를 더한 뒤, xx에 aja_j를 더한다.

이 과정이 끝났을 때의 x mod 230x \bmod 2^{30} 값을 구하라.

입력

첫 줄에 두 정수 nn과 mm이 주어진다 (1≤n≤500 0001 \le n \le 500\,000; 1≤m≤301 \le m \le 30).

이어지는 nn개의 줄 중 ii번째 줄에는 두 정수 pip_i와 qiq_i가 주어진다 (0≤pi,qi<2m0 \le p_i, q_i < 2^m).

출력

x mod 230x \bmod 2^{30}의 값을 출력한다.

힌트

예제 테스트에서 처음에는 A=[0,0,0,0]A = [0, 0, 0, 0]이고 x=0x = 0이다. 그다음 과정은 다음과 같다.

  • i=1i = 1일 때 l=1l = 1, r=2r = 2이므로 A=[0,1,1,0]A = [0, 1, 1, 0], x=2x = 2가 된다.
  • i=2i = 2일 때 l=1l = 1, r=3r = 3이므로 A=[0,3,3,2]A = [0, 3, 3, 2], x=10x = 10이 된다.
  • i=3i = 3일 때 l=0l = 0, r=1r = 1이므로 A=[3,6,3,2]A = [3, 6, 3, 2], x=19x = 19가 된다.
  • i=4i = 4일 때 l=0l = 0, r=3r = 3이므로 A=[7,10,7,6]A = [7, 10, 7, 6], x=49x = 49가 된다.
  • i=5i = 5일 때 l=1l = 1, r=3r = 3이므로 A=[7,15,12,11]A = [7, 15, 12, 11], x=87x = 87이 된다.

예제1

  1. 예제 1

    입력
    5 2
    2 1
    1 3
    3 2
    1 0
    0 2
    
    예상 출력
    87