만드는 중입니다

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

격자 쿼리 2

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

요약
10^5 x 10^5 격자에서 직사각형에 V를 더하거나 직사각형의 합을 10^9+7로 나눈 나머지로 구하는 질의를 최대 25만 개 처리합니다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 수학, 구현
정답자
아직 제출이 없습니다

문제

세로 10510^5, 가로 10510^5 크기의 2차원 배열이 있고, 모든 값은 처음에 0으로 채워져 있다. 행 번호는 아래로 갈수록, 열 번호는 오른쪽으로 갈수록 커진다. ii번째 행, jj번째 열의 위치는 (i−1,j−1)(i-1,j-1)로 표현한다.

Lawali는 여러분이 더욱 고통받는 모습을 보기 위해 QQ번 다음 두 종류의 연산을 하려고 한다.

  1. X1X_1 Y1Y_1 X2X_2 Y2Y_2 VV: (X1,Y1)(X_1,Y_1)와 (X2,Y2)(X_2,Y_2) 사이의 모든 위치에 해당하는 값에 VV를 더한다. (V>0V > 0)
  2. X1X_1 Y1Y_1 X2X_2 Y2Y_2 00: (X1,Y1)(X_1,Y_1)와 (X2,Y2)(X_2,Y_2) 사이의 모든 위치에 해당하는 값의 합을 구하고 출력한다.

입력

첫째 줄에 QQ가 주어진다. (1≤Q≤2.5×1051 \le Q \le 2.5 \times 10^5)

둘째 줄부터 QQ개의 줄에 다섯 개의 정수 Ai,Bi,Ci,Di,KiA_i, B_i, C_i, D_i, K_i가 주어진다. (0≤Ai,Bi,Ci,Di,Ki<2310 \le A_i, B_i, C_i, D_i, K_i < 2^{31})

last_ans는 처음에 0이고, 가장 최근에 출력한 값이다. ii번째 쿼리의 값은 다음과 같이 정한다.

Xi1=(Ai⊕last_ans) mod 105X_{i1} = (A_i \oplus \text{last\_ans}) \bmod 10^5, Yi1=(Bi⊕last_ans) mod 105Y_{i1} = (B_i \oplus \text{last\_ans}) \bmod 10^5, Xi2=(Ci⊕last_ans) mod 105X_{i2} = (C_i \oplus \text{last\_ans}) \bmod 10^5, Yi2=(Di⊕last_ans) mod 105Y_{i2} = (D_i \oplus \text{last\_ans}) \bmod 10^5, Vi=(Ki⊕last_ans) mod (109+7)V_i = (K_i \oplus \text{last\_ans}) \bmod (10^9+7)

Xi1,Yi1,Xi2,Yi2X_{i1}, Y_{i1}, X_{i2}, Y_{i2}는 ii번째 쿼리의 X1,Y1,X2,Y2X_1, Y_1, X_2, Y_2이며, 0≤Xi1,Yi1,Xi2,Yi2<1050 \le X_{i1}, Y_{i1}, X_{i2}, Y_{i2} < 10^5, 0≤Vi<109+70 \le V_i < 10^9+7, Xi1≤Xi2X_{i1} \le X_{i2}, Yi1≤Yi2Y_{i1} \le Y_{i2}를 만족한다.

1번 쿼리는 50000개를 넘지 않으며, 2번 쿼리는 1개 이상 있다.

출력

2번 쿼리마다 합을 109+710^9+7로 나눈 나머지를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    10
    40 31 99 46 987780775
    38 0 68 74 0
    330276393 330276413 330276477 330276459 822003462
    330276378 330276364 330276464 330276479 306736652
    330276394 330276452 330276459 330276424 496257100
    330276368 330276474 330276459 330276474 520765327
    330276412 330276411 330276372 330276460 330276394
    969279116 969279132 969279133 969279209 969279141
    80818941 80818932 80818860 80818880 555081578
    80818880 80818869 80818848 80818840 80818939
    
    예상 출력
    330276394
    969279141
    80818939
    775484641