만드는 중입니다

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

사전순 비교

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

요약
순열 a와 p에 자리 교환 연산이 주어질 때, A_x와 A_y를 사전순으로 비교하는 문제입니다.
난이도

어려움10점 중 8점

유형
배열, 문자열 매칭, 이분 탐색, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

길이가 nn인 두 순열 aa와 pp를 생각한다. 처음에 모든 1≤i≤n1\le i\le n에 대해 a_i=p_i=ia\_i=p\_i=i이다. A_1=aA\_1=a이고, 모든 i≥1i\ge 1과 1≤j≤n1\le j\le n에 대해 A_i,j=A_i−1,p_jA\_{i,j}=A\_{i-1,p\_j}를 만족하는 순열의 수열을 AA라고 한다.

연산은 세 종류이며, xx와 yy는 양의 정수이다.

  1. swap_a xx yy: a_xa\_x와 a_ya\_y를 교환한다. 단, 1≤x,y≤n1\le x, y\le n이다.
  2. swap_p xx yy: p_xp\_x와 p_yp\_y를 교환한다. 단, 1≤x,y≤n1\le x, y\le n이다.
  3. cmp xx yy: A_xA\_x와 A_yA\_y를 사전순으로 비교한다.

세 번째 종류의 연산마다 A_xA\_x와 A_yA\_y의 관계를 출력한다. 순열 ss가 순열 tt보다 사전순으로 작다는 것은, s_i<t_is\_i<t\_i이고 모든 1≤j<i1\le j<i에 대해 s_j=t_js\_j=t\_j인 인덱스 ii가 존재한다는 뜻이다.

입력

첫 줄에 테스트 케이스의 개수 TT (1≤T≤1051\le T\le 10^5)가 주어진다. 각 테스트 케이스는 다음과 같다.

첫 줄에 정수 nn과 qq (1≤n,q≤1051\le n, q\le 10^5)가 주어진다. nn은 순열의 길이이고, qq는 연산의 개수이다.

이어지는 qq개의 줄에는 문자열 ff와 두 정수 xx, yy가 주어진다. ff는 swap_a, swap_p, cmp 중 하나이다. ff가 swap_a 또는 swap_p이면 1≤x,y≤n1 \le x, y \le n이고, ff가 cmp이면 1≤x,y≤10181 \le x, y \le 10^{18}이다.

모든 테스트 케이스에 걸친 nn의 합과 qq의 합은 각각 10510^5을 넘지 않는다.

출력

각 테스트 케이스마다 cmp 연산의 결과를 한 줄에 하나씩 출력한다. A_xA\_x가 A_yA\_y보다 사전순으로 작으면 <, 크면 >(즉 A_yA\_y가 A_xA\_x보다 사전순으로 작음), 같으면 =를 출력한다.

예제1

  1. 예제 1

    입력
    2
    5 5
    cmp 1 2
    swap_p 1 2
    cmp 1 2
    swap_a 1 2
    cmp 1 2
    1 1
    swap_a 1 1
    
    예상 출력
    =
    <
    >