배열 나누기

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

요약
나눈 결과의 모든 접두사 합이 0 이상이 되도록 배열을 최대 개수의 연속 부분 배열로 나누고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 5점

유형
그리디, 누적 합
정답자
아직 제출이 없습니다

문제

길이 NN의 정수 배열이 주어진다. 당신은 주어진 배열을 여러 개의 연속한 부분 배열로 나눌 수 있다. 단, 나뉜 부분 배열들은 다음 조건을 만족해야 한다.

  • 배열의 길이를 LL이라고 할 때, 1≤i≤L1 \leq i \leq L을 만족하는 모든 정수 ii에 대해, 11번째부터 ii번째 원소까지의 합은 항상 00 이상이어야 한다.

조건을 만족하도록 부분 배열을 나눌 때, 나뉜 부분 배열의 최대 개수를 구하여라.

입력

첫 번째 줄에 배열의 원소의 개수 NN이 주어진다. (1≤N≤200,000)(1 \leq N \leq 200\\,000)

두 번째 줄에 NN개의 원소 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. (−200,000≤A_i≤200,000)(-200\\,000 \leq A\_i \leq 200\\,000)

입력으로 주어지는 모든 수는 정수이다.

출력

조건을 만족하도록 부분 배열로 나누는 방법이 없다면 -1, 있다면 나뉜 부분 배열의 최대 개수를 출력한다.

예제1

  1. 예제 1

    입력
    10
    5 -3 1 20 -7 -1 6 -2 -3 1
    
    예상 출력
    5