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

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

트레이딩 시스템

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

요약
n개의 정수와 k가 주어질 때, 모든 연속 부분 배열의 합 중 가장 큰 k개를 내림차순으로 출력한다.
난이도

어려움10점 중 8점

유형
힙, 누적 합, 이분 탐색, 배열
정답자
아직 제출이 없습니다

문제

SY Company는 주식 트레이딩 시스템을 개선하려고 한다. 이를 위해 주가 변동 정보를 활용하기로 한다. 변동값은 연속한 두 날의 주가 차이다. 회사는 어떤 주식의 최근 변동값 n개를 수집한다. 주식의 변동성은 연속한 변동값들의 합 중 최댓값에 크게 영향을 받는다는 사실이 밝혀졌다. 합이 최대가 되는 연속한 변동값들을 찾는 문제는 컴퓨터과학에서 최대 연속 부분합 문제로 알려져 있으며, 입력값은 배열에 저장된다. 최댓값 하나만 이용하는 것보다 k(≥ 1)개의 큰 연속 부분합을 이용하는 것이 트레이딩 시스템 개선에 도움이 된다는 것은 자연스럽다.

주어진 n개의 변동값과 양의 정수 k에 대해, 연속한 변동값들의 합 중 k번째로 큰 것까지를 구하는 프로그램을 작성하시오.

입력

입력은 표준 입력에서 읽는다. 첫 줄에는 두 정수 n과 k가 주어지며, 1 ≤ n ≤ 250,000이고 1 ≤ k ≤ min(10,000, n(n + 1)/2)이다. 다음 줄에는 n개의 변동값을 나타내는 n개의 정수가 주어진다. 모든 변동값은 −109 이상 109 이하이다.

출력

출력은 표준 출력에 쓴다. 정확히 한 줄을 출력한다. 그 줄에는 연속한 변동값들의 합 중 k개를 큰 것부터 작은 순서로 출력한다. 연속 부분합은 하나 이상의 연속한 변동값의 합이다.

예제2

  1. 예제 1

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

    입력
    6 10
    3 8 -3 2 5 2
    
    예상 출력
    17 15 14 12 11 10 9 8 8 7