사탕

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

요약
일렬로 놓인 N개의 사탕에서 서로 이웃하지 않은 j개를 골라 얻는 최대 합을 모든 j에 대해 구한다.
난이도

어려움10점 중 9점

유형
동적 계획법, 그리디, 힙, 구현
정답자
아직 제출이 없습니다

문제

탁자 위에 N개의 사탕이 일렬로 놓여 있다. 각 사탕에는 맛있다는 정도를 나타내는 값이 있다. 왼쪽에서 i번째 사탕의 맛은 AiA_i이다 (1≤i≤N1 \le i \le N).

JOI-chan은 이 N개의 사탕 중 일부를 먹기로 했다. JOI-chan은 자신이 먹을 사탕들의 맛의 합을 최대로 하고 싶다.

그런데 JOI-chan은 사탕을 그냥 탐욕스럽게 고르는 것은 재미없다고 생각해서, 연속한 두 사탕을 동시에 고를 수 없다는 규칙을 만들었다.

JOI-chan은 사탕을 몇 개 먹을지 정하지 않았으므로, 각 jj (1≤j≤⌈N/2⌉1 \le j \le \lceil N/2 \rceil)에 대해 사탕을 j개 먹을 때의 맛의 합의 최댓값을 알고 싶어 한다. 여기서 ⌈x⌉\lceil x \rceil는 x보다 작지 않은 가장 작은 정수이다.

사탕의 개수와 각 사탕의 맛이 주어졌을 때, 각 jj (1≤j≤⌈N/2⌉1 \le j \le \lceil N/2 \rceil)에 대해 사탕을 j개 먹을 때의 맛의 합의 최댓값을 계산하는 프로그램을 작성하라.

입력

표준 입력에서 다음 데이터를 읽는다.

  • 첫째 줄에는 정수 N이 주어진다. 이는 탁자 위에 N개의 사탕이 있다는 뜻이다.
  • 다음 N개의 줄 중 i번째 줄 (1≤i≤N1 \le i \le N)에는 정수 AiA_i가 주어진다. 이는 왼쪽에서 i번째 사탕의 맛이 AiA_i라는 뜻이다.

출력

표준 출력에 ⌈N/2⌉\lceil N/2 \rceil개의 줄을 출력한다. 출력의 j번째 줄 (1≤j≤⌈N/2⌉1 \le j \le \lceil N/2 \rceil)에는 사탕을 j개 먹을 때의 맛의 합의 최댓값을 출력한다.

제한

  • 1≤N≤200 0001 \le N \le 200\,000.
  • 1≤Ai≤1 000 000 0001 \le A_i \le 1\,000\,000\,000 (1≤i≤N1 \le i \le N).

예제2

  1. 예제 1

    입력
    5
    3
    5
    1
    7
    6
    
    예상 출력
    7
    12
    10
    
  2. 예제 2

    입력
    20
    623239331
    125587558
    908010226
    866053126
    389255266
    859393857
    596640443
    60521559
    11284043
    930138174
    936349374
    810093502
    521142682
    918991183
    743833745
    739411636
    276010057
    577098544
    551216812
    816623724
    
    예상 출력
    936349374
    1855340557
    2763350783
    3622744640
    4439368364
    5243250666
    5982662302
    6605901633
    7183000177
    7309502029