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

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

AddK

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

요약
K개 위치를 왼쪽으로 순환 이동하는 갱신과 구간 안 길이 m인 모든 연속 부분수열의 합을 구하는 질의를 처리한다.
난이도

보통10점 중 7점

유형
배열, 누적 합, 수학, 구현
정답자
아직 제출이 없습니다

문제

정수 NN개로 이루어진 배열 AA와 정수 KK가 주어진다. AA는 A1,…,ANA_1, \dots, A_N이다. 다음 두 종류의 질의 QQ개를 처리해야 한다.

  • 1 i1 i2 … iK1 \, i_1 \, i_2 \, \dots \, i_K: Ai1,…,AiKA_{i_1}, \dots, A_{i_K}를 왼쪽으로 순환 이동한다. 즉, Ai1,Ai2,…,AiK−1,AiKA_{i_1}, A_{i_2}, \dots, A_{i_{K-1}}, A_{i_K}의 값은 각각 Ai2,Ai3,…,AiK,Ai1A_{i_2}, A_{i_3}, \dots, A_{i_K}, A_{i_1}이 된다. i1,…,iKi_1, \dots, i_K는 서로 다르며, 반드시 증가하는 순서일 필요는 없다.
  • 2 l r m2 \, l \, r \, m: 수열 Al,Al+1,…,Ar−1,ArA_l, A_{l+1}, \dots, A_{r-1}, A_r에서 길이가 mm인 모든 연속 부분수열의 원소 합을 구한다. 여러 부분수열에 등장하는 원소는 등장한 횟수만큼 더한다.

입력

첫째 줄에 정수 NN과 KK가 주어진다. 둘째 줄에 배열 AA의 원소 NN개가 주어진다. 셋째 줄에 질의의 개수 QQ가 주어지고, 이어서 QQ개의 줄에 위에서 설명한 두 종류 중 하나의 질의가 주어진다.

출력

2번 질의의 답을 한 줄에 하나씩 출력한다.

제한

  • 0≤Ai≤1060 \le A_i \le 10^6
  • 1≤l≤r≤N1 \le l \le r \le N
  • 1≤m≤r−l+11 \le m \le r - l + 1

힌트

첫 번째 질의는 2번 질의이고, 수열 (2,5,1,9,3,4)(2, 5, 1, 9, 3, 4)에서 길이가 m=4m = 4인 모든 연속 부분수열의 원소 합을 구해야 한다. 부분수열은 (2,5,1,9)(2, 5, 1, 9), (5,1,9,3)(5, 1, 9, 3), (1,9,3,4)(1, 9, 3, 4)이고, 원소 합은 52이다.

두 번째 질의는 1번 질의이고, 배열 AA에서 인덱스 22, 55, 88에 있는 원소를 왼쪽으로 순환 이동해야 한다. 그러면 배열 AA는 (7,9,5,1,6,3,4,2)(7, 9, 5, 1, 6, 3, 4, 2)가 된다.

세 번째 질의는 2번 질의이고, 수열 (9,5,1,6,3,4)(9, 5, 1, 6, 3, 4)에서 길이가 m=3m = 3인 모든 연속 부분수열의 원소 합을 구해야 한다. 부분수열은 (9,5,1)(9, 5, 1), (5,1,6)(5, 1, 6), (1,6,3)(1, 6, 3), (6,3,4)(6, 3, 4)이고, 원소 합은 5050이다.

예제1

  1. 예제 1

    입력
    8 3
    7 2 5 1 9 3 4 6
    3
    2 2 7 4
    1 2 5 8
    2 2 7 3
    
    예상 출력
    52
    50