만드는 중입니다

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

목걸이 공장

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

요약
N개의 구슬로 된 목걸이에 회전, 뒤집기, 교환, 칠하기 명령을 처리하고, 전체 또는 구간에서 같은 색이 연속된 구간의 수를 셉니다.
난이도

어려움10점 중 8점

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

문제

회사 T는 색이 있는 구슬로 목걸이를 판매한다. 이 목걸이는 디자인이 트렌디하고 스타일이 다양하며 가격도 저렴해서 젊은 층에게 인기가 많다. 회사 T는 고객이 가장 아름답다고 생각하는 목걸이 디자인을 직접 고를 수 있도록 목걸이 '뷔페' 생산 시스템을 도입하기로 했다.

목걸이 뷔페 생산 시스템은 하드웨어와 소프트웨어로 구성된다. 소프트웨어는 사용자와 상호작용하며 하드웨어를 제어하고, 하드웨어는 소프트웨어가 보낸 명령을 받아 지정된 목걸이를 만든다. 하드웨어는 이미 완성되었지만 소프트웨어는 아직 개발되지 않았다. 회사 T는 전국 정보올림피아드에 출전한 당신에게 소프트웨어 시뮬레이션 시스템 작성을 맡겼다.

목걸이에는 구슬 NN개가 있고, 각 구슬의 색은 1, 2, ..., cc 중 하나이다. 목걸이는 평평한 판 위에 고정되어 있다. 판 위의 한 지점을 위치 1로 정하고, 거기서 시계 방향으로 나머지 지점을 위치 2, 3, ..., NN이라고 한다.

프로그램은 아래 명령을 지원해야 한다.

명령매개변수 조건설명
R k0 < k < NRotate k. 목걸이를 시계 방향으로 k칸 회전한다. 위치 1의 구슬은 위치 k + 1로, 위치 2의 구슬은 위치 k + 2로 이동하는 식이다.
FFlip. 목걸이를 대칭축을 기준으로 뒤집는다. 위치 1의 구슬은 움직이지 않고, 위치 2의 구슬은 위치 N의 구슬과, 위치 3의 구슬은 위치 N - 1의 구슬과 자리를 바꾼다. 이런 식으로 계속한다.
S i j1 ≤ i, j ≤ NSwap i, j. 위치 i의 구슬과 위치 j의 구슬을 맞바꾼다.
P i j x1 ≤ i, j ≤ N; x ≤ cPaint i, j. 위치 i부터 위치 j까지(두 끝 포함) 구간의 구슬을 색 x로 칠한다.
CCount. 현재 목걸이가 몇 개의 '구간'으로 이루어져 있는지 구한다. 연속된 구슬이 모두 같은 색인 부분을 구간이라고 한다.
CS i j1 ≤ i, j ≤ NCountSegment i, j. 현재 목걸이에서 위치 i부터 위치 j까지(두 끝 포함) 세그먼트가 몇 개의 구간으로 이루어져 있는지 구한다.

입력

첫 줄에 구슬의 개수 NN과 색의 개수 cc가 주어진다.

둘째 줄에는 위치 1부터 위치 NN까지 구슬의 색 x1,x2,…,xNx_1, x_2, \ldots, x_N이 주어진다(1 ≤ xix_i ≤ cc).

셋째 줄에는 질의의 개수 QQ가 주어진다. 이어서 QQ개의 줄에 위 형식 중 하나의 명령이 한 줄에 하나씩 주어진다.

출력

C와 CS 명령마다 답을 한 줄에 정수 하나로 출력한다.

제한

N≤500000N \le 500000, Q≤500000Q \le 500000, c≤1000c \le 1000.

힌트

R 명령은 구슬을 회전시키는 것이지, 위치의 번호를 바꾸는 것이 아니다. F 명령의 대칭축은 항상 위치 1이다.

CS 명령은 세그먼트 안에 있는 구간의 수를 센다. 길이가 NN인 세그먼트를 질의하는 경우에도 이를 세그먼트로 취급해야 한다.

예제1

  1. 예제 1

    입력
    5 3
    1 2 3 2 1
    4
    C
    R 2
    P 5 5 2
    CS 4 1
    
    예상 출력
    4
    1