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

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

달리는 게임

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

요약
주어진 수열에서 연속 구간을 골라 구간 안 위치를 가중치로 곱한 합이 가장 커지도록 합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 누적 합, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

일직선을 달려가면서 점수가 붙은 물체를 차례로 먹는 게임이 요즘 유행이다. 유행을 조금 늦게 따라가는 경근이도 이런 게임을 하나 만들었다. 이름은 아직 없다.

이 게임에는 물체를 먹을 때마다 점수에 곱해지는 곱 계수가 있다. 게임을 시작할 때 곱 계수는 0이다. 캐릭터는 아주 먼 왼쪽의 한 지점에서 출발해 오른쪽으로 달려가고, 경근이가 일직선 위에 놓아둔 물체를 순서대로 만난다. 캐릭터가 물체를 먹으면 곱 계수가 1 늘어난 다음, (먹은 물체의 점수) ×\times (늘어난 곱 계수)만큼이 캐릭터가 얻은 점수에 더해진다. 물체를 먹지 않으면 곱 계수가 0으로 초기화되고 점수도 얻지 못한다. 물체의 점수가 양수라는 보장이 없으므로, 높은 점수를 받으려면 어떤 물체를 먹고 어떤 물체를 건너뛸지 잘 정해야 한다. 이를 정하고 나면 캐릭터는 다시 오른쪽으로 달리며, 왼쪽으로 되돌아갈 수는 없다.

경근이가 만든 맵에서 캐릭터는 물체 NN개를 순서대로 만난다. 물체의 점수가 놓인 순서대로 주어질 때, 캐릭터가 얻을 수 있는 최대 점수를 구하라.

입력

첫째 줄에 자연수 NN (1≤N≤1061 \le N \le 10^6)이 주어진다.

둘째 줄에 물체의 점수를 뜻하는 정수 NN개가 공백을 사이에 두고 주어진다. 물체는 맵에 놓인 순서대로 주어지므로 캐릭터도 주어진 순서대로 물체를 만난다. 각 정수의 절댓값은 10610^6 이하이다.

출력

주어진 맵에서 캐릭터가 얻을 수 있는 최대 점수를 출력한다. 답은 32비트 정수의 범위를 넘을 수 있으므로 64비트 정수를 쓴다.

힌트

첫 번째 예제에서는 세 물체를 모두 먹는 것이 최선이다.

  • 세 번째 물체만 먹으면 5×1=55 \times 1 = 5점이다.
  • 두 번째와 세 번째 물체를 먹으면 (−1)×1+5×2=9(-1) \times 1 + 5 \times 2 = 9점이다.
  • 세 물체를 모두 먹으면 (−1)×1+(−1)×2+5×3=12(-1) \times 1 + (-1) \times 2 + 5 \times 3 = 12점이다.

예제3

  1. 예제 1

    입력
    3
    -1 -1 5
    
    예상 출력
    12
    
  2. 예제 2

    입력
    1
    -5
    
    예상 출력
    0
    
  3. 예제 3

    입력
    3
    5 -100 5
    
    예상 출력
    10