Majorant
시간 제한2초메모리 제한512 MB
배열의 원소를 바꾸는 갱신과 구간 질의가 주어질 때, 구간 안 부분배열마다 과반 원소 i의 개수에 i를 곱해 모두 더한 값을 998244353으로 나눈 나머지를 구합니다.
문제
다중집합의 majorant는 다른 모든 원소를 합친 것보다 더 많이 등장하는 원소이다. majorant가 없는 다중집합도 있다.
양의 정수 개로 이루어진 배열 이 주어진다. 배열 의 부분 배열은 을 만족하는 이다.
질의는 개이며, 두 종류가 있다.
- Update p q: 의 값을 로 바꾼다.
- Query p q (): 라 하자. 의 부분 배열 중 가 majorant인 부분 배열의 개수에 를 곱한 값을 구한다. 이 값을 의 어떤 부분 배열이든 majorant로 갖는 서로 다른 모든 에 대해 더하고, 그 합을 998244353으로 나눈 나머지를 구한다.
입력
첫 줄에 이 주어진다. 둘째 줄에 배열의 원소 개가 주어진다. 셋째 줄에 이 주어진다. 이어서 개의 줄에 암호화된 질의를 나타내는 정수 , , 가 하나씩 주어진다.
last_output은 프로그램이 표준 출력에 마지막으로 출력한 수이다. 아직 출력한 수가 없으면 0으로 한다.
을 계산한다.
이면 Update 질의이며, , 이다.
이면 Query 질의이며, , 이다.
출력
type이 2인 질의마다 답을 한 줄에 하나씩 출력한다.
제한
- 배열 의 모든 원소 는 을 만족한다.
힌트
복호화하면 첫 번째 질의는 query, p=1, q=4가 된다. majorant가 1인 부분 배열은 2개, majorant가 2인 부분 배열은 5개이므로 답은 이다.
두 번째 질의는 update, p=3, q=3이 된다. 이후 배열은 1, 2, 3, 1이 된다.
세 번째 질의는 query, p=1, q=3이다. majorant가 1인 부분 배열은 1개, 2인 부분 배열은 1개, 3인 부분 배열은 1개 있다.