수열과 쿼리 12
시간 제한2초메모리 제한512 MB
수열에 값 변경, 삭제, 삽입 연산이 가해질 때 구간의 서로 다른 값 개수와 서로 다른 값들의 삼중 곱 합을 구한다.
문제
길이가 인 수열 이 주어진다. 이 수열에 다음 다섯 종류의 쿼리를 주어진 순서대로 처리하는 프로그램을 작성하시오.
1 l r: 번째 수부터 번째 수까지에 나오는 서로 다른 값을 오름차순으로 정렬한 집합을 라고 할 때, 아래 값을 출력한다.2 x y: 를 로 바꾼다.3 x: 번째 수를 지운다.4 z y: 번째 수의 바로 뒤에 를 넣는다. 이면 수열의 맨 앞에 를 넣는다.5 l r: 번째 수부터 번째 수까지에 나오는 서로 다른 수의 개수를 출력한다.
1번 쿼리의 답은 다음과 같다.
수열의 인덱스는 1부터 시작한다. 같은 값이 구간 안에 여러 번 나와도 에는 한 번만 들어가고, 가 3보다 작으면 1번 쿼리의 답은 0이다. 수열의 크기는 항상 1 이상이다.
입력
첫째 줄에 수열의 크기 이 주어진다.
둘째 줄에 이 주어진다.
셋째 줄에 쿼리의 개수 이 주어진다.
넷째 줄부터 개의 줄에 쿼리가 한 줄에 하나씩 주어진다.
여기서 는 그 쿼리를 처리하기 직전의 수열의 크기다.
출력
1번 쿼리와 5번 쿼리의 답을 주어진 순서대로 한 줄에 하나씩 출력한다.