만드는 중입니다

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

합이 0 이상인 구간

면접 대비

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

요약
서로 겹치지 않고 구간 합이 0 이상인 구간들을 골라, 선택한 구간 길이의 합이 최대가 되는 값을 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 누적 합, 정렬
정답자
아직 제출이 없습니다

문제

정수 nn개로 이루어진 배열 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다. 집합 SS는 다음 조건을 모두 만족하는 구간들의 집합이다.

  • SS의 각 원소는 [x,y][x, y] 꼴이며, xx와 yy는 11 이상 nn 이하의 정수이고 x≤yx \leq y이다.
  • SS의 서로 다른 두 구간은 겹치지 않는다. 구간 [a,b][a, b]와 [c,d][c, d]는 a≤x≤ba \leq x \leq b이면서 c≤x≤dc \leq x \leq d인 정수 xx가 존재할 때에만 겹친다.
  • SS에 속한 각 [x,y][x, y]에 대해 ax+ax+1+…+ay≥0a_x + a_{x+1} + \ldots + a_y \geq 0이다.

구간 [x,y][x, y]의 길이는 y−x+1y - x + 1이다. f(S)f(S)는 SS에 속한 모든 구간의 길이의 합이며, f(S)=∑[x,y]∈S(y−x+1)f(S) = \sum_{[x, y] \in S} (y - x + 1)이다. SS가 비어 있으면 f(S)f(S)는 00이다.

가능한 모든 SS 가운데 f(S)f(S)의 최댓값을 구하라.

입력

첫째 줄에 정수 nn(1≤n≤2⋅1051 \leq n \leq 2 \cdot 10^5)이 주어진다.

둘째 줄에는 nn개의 정수 a1,a2,…,ana_1, a_2, \ldots, a_n(−109≤ai≤109-10^9 \leq a_i \leq 10^9)이 주어진다.

출력

f(S)f(S)의 최댓값을 정수 하나로 출력한다.

예제3

  1. 예제 1

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

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

    입력
    4
    -1 -2 -3 -4
    
    예상 출력
    0