만드는 중입니다

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

슬라이드 개수

면접 대비

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

요약
배열과 상수 C가 주어질 때, 두 포인터 과정에서 만들어지는 윈도우마다 각 원소가 몇 번 포함되는지 구합니다.
난이도

보통10점 중 5점

유형
투 포인터, 슬라이딩 윈도우, 누적 합
정답자
아직 제출이 없습니다

문제

수업 과제로 슬라이딩 윈도우 알고리즘을 이용해 정수 배열을 분석한다. 정수 NN개 w1,…,wNw_1, \ldots, w_N과 상수 CC가 주어지면, 알고리즘은 시작 인덱스 ss와 끝 인덱스 ee를 다음과 같이 관리한다.

  • 처음에 s=e=1s = e = 1로 둔다.
  • s≤Ns \leq N인 동안 다음을 반복한다.
    • e+1>Ne+1 > N이면 ss를 1 증가시킨다.
    • 그렇지 않고 ws+⋯+we+1>Cw_s + \cdots + w_{e+1} > C이면 ss를 1 증가시킨다.
    • 그 밖의 경우에는 ee를 1 증가시킨다.

실행 중에 나타나는 서로 다른 인덱스 쌍 (s,e)(s,e)마다 윈도우 하나가 정해진다. s≤i≤es \leq i \leq e이면 원소 wiw_i는 윈도우 (s,e)(s,e)에 속한다. s>es > e이면 윈도우는 비어 있다.

앞의 입력에서 나타나는 윈도우는 (1,1)(1,1), (1,2)(1,2), (1,3)(1,3), (2,3)(2,3), (3,3)(3,3), (3,4)(3,4), (4,4)(4,4), (5,4)(5,4), (5,5)(5,5), (6,5)(6,5)이다. 각 원소 wiw_i에 대해, 실행 중 wiw_i가 속하는 서로 다른 윈도우의 개수를 구한다.

입력

첫 줄에 원소의 개수 NN(1≤N≤100 0001 \leq N \leq 100\,000)과 윈도우 상수 CC(1≤C≤1 000 0001 \leq C \leq 1\,000\,000)이 주어진다.

둘째 줄에는 정수 w1,…,wNw_1, \ldots, w_N(0≤wi≤C0 \leq w_i \leq C)이 주어진다.

출력

각 원소에 대해 입력 순서대로, 알고리즘 실행 중 그 원소가 속하는 서로 다른 윈도우의 개수를 출력한다.

예제2

  1. 예제 1

    입력
    5 3
    1 1 1 2 2
    
    예상 출력
    3
    3
    4
    2
    1
    
  2. 예제 2

    입력
    5 10
    1 2 3 4 5
    
    예상 출력
    4
    4
    4
    5
    2