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

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

반전 수와 쿼리

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

요약
1부터 N까지의 순열에서 두 원소 교환과 구간 뒤집기 쿼리를 처리한 뒤, 매번 반전 수를 2로 나눈 나머지를 출력한다.
난이도

보통10점 중 7점

유형
수학, 조합론, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

1부터 NN까지의 수가 한 번씩 등장하는 수열 P={1,2,⋯ ,N}P = \lbrace 1, 2, \cdots, N \rbrace이 주어진다.

수열 PP에 대해, i<ji < j 이면서 P_i>P_jP\_i > P\_j를 만족하는 순서쌍 (i,j)(i, j)의 개수를 PP의 반전 수라고 정의하자.

이때, 다음 쿼리를 수행하는 프로그램을 작성하시오.

  • 1 ll rr : P_lP\_l와 P_rP\_r를 교환한다.
  • 2 ll rr : P_lP\_l에서 P_rP\_r 사이의 수를 뒤집는다. 뒤집은 뒤의 수열은 다음과 같다.
    • {P_1,⋯ ,P_l−1,P_r,P_r−1,⋯ ,P_l+1,P_l,P_r+1,⋯ ,P_N}\lbrace P\_1, \cdots, P\_{l-1}, P\_r, P\_{r-1}, \cdots, P\_{l+1}, P\_l, P\_{r+1}, \cdots, P\_N \rbrace

각각의 쿼리를 처리한 다음 수열의 반전 수를 2로 나눈 나머지를 출력한다.

입력

첫째 줄에 수열의 길이 NN과 쿼리의 개수 QQ가 공백으로 구분되어 주어진다. (2≤N≤1092 \leq N \leq 10^9, 1≤Q≤1051 \leq Q \leq 10^5)

둘째 줄부터 QQ개의 줄에 쿼리의 정보 a,l,ra, l, r이 공백으로 구분되어 주어진다. (1≤a≤21\leq a \leq 2, 1≤l<r≤N1 \leq l < r \leq N)

출력

각 쿼리를 처리한 다음 수열의 반전 수를 2로 나눈 나머지를 한 줄에 하나씩 출력한다.

힌트

  • Python 사용자는 PyPy로 제출하는 것을 권장한다.

예제1

  1. 예제 1

    입력
    3 4
    2 1 3
    1 1 2
    2 1 3
    1 2 3
    
    예상 출력
    1
    0
    1
    0