만드는 중입니다

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

수열의 좋음

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

요약
모든 연속 부분 배열에 대해 합에서 최대 증가 부분 수열의 합을 뺀 값의 최댓값을 구하고, 그 값을 내는 가장 짧은 연속 부분 배열의 개수를 센다.
난이도

어려움10점 중 8점

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

문제

정수 NN개로 이루어진 수열 A=A0,A1,…,AN−1A = A_0, A_1, \dots, A_{N-1}이 있다. 부분 수열, 증가 부분 수열, 연속 부분 수열의 정의는 다음과 같다.

  • 부분 수열: 수열 AA에서 00개 이상의 수를 지워서 만드는 수열. 지우지 않은 수의 순서는 바꾸지 않는다. 크기가 00인 부분 수열도 있으며, 이를 빈 부분 수열이라고 한다.
  • 증가 부분 수열: 길이가 11 이상인 부분 수열 중에서, 각각의 수가 바로 앞의 수보다 큰 것.
  • 연속 부분 수열: 지우지 않은 수가 원래 수열 AA에서 서로 이웃한 부분 수열. AA의 ll번째 수부터 rr번째 수까지로 이루어진 연속 부분 수열을 A[l,r]=Al,Al+1,…,ArA[l, r] = A_l, A_{l+1}, \dots, A_r로 쓴다. (l≤rl \le r)

A=[2,1,3]A = [2, 1, 3]이면 부분 수열은 [],[2],[1],[3],[2,1],[2,3],[1,3],[2,1,3][], [2], [1], [3], [2, 1], [2, 3], [1, 3], [2, 1, 3]이고, 연속 부분 수열은 [2],[1],[3],[2,1],[1,3],[2,1,3][2], [1], [3], [2, 1], [1, 3], [2, 1, 3]이며, 증가 부분 수열은 [2],[1],[3],[2,3],[1,3][2], [1], [3], [2, 3], [1, 3]이다.

수열에서 정의하는 함수는 다음 세 가지다.

  • sum(l,r)=Al+Al+1+⋯+Arsum(l, r) = A_l + A_{l+1} + \dots + A_r
  • inc(l,r)inc(l, r): A[l,r]A[l, r]의 증가 부분 수열 중에서 원소의 합이 가장 큰 값
  • f(l,r)=sum(l,r)−inc(l,r)f(l, r) = sum(l, r) - inc(l, r)

수열의 좋음 gg는 g=max⁡f(l,r)g = \max f(l, r) (0≤l≤r<N0 \le l \le r < N)로 정의한다. 즉 gg는 AA의 모든 연속 부분 수열의 f(l,r)f(l, r) 중 가장 큰 값이다.

정수 mm은 f(l,r)=gf(l, r) = g인 연속 부분 수열의 길이 중 가장 작은 값이다.

AA가 주어졌을 때 먼저 gg를 구하고, r−l+1=mr - l + 1 = m이면서 f(l,r)=gf(l, r) = g인 연속 부분 수열의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 NN (1≤N≤200,0001 \le N \le 200{,}000)이 주어진다. 둘째 줄에 A0,A1,…,AN−1A_0, A_1, \dots, A_{N-1}이 공백으로 구분되어 주어진다. (−40≤Ai≤40-40 \le A_i \le 40)

출력

정수 두 개를 공백으로 구분해 한 줄에 출력한다. 첫 번째 정수는 주어진 수열의 gg이고, 두 번째 정수는 r−l+1=mr - l + 1 = m이면서 f(l,r)=gf(l, r) = g인 연속 부분 수열의 개수이다.

예제4

  1. 예제 1

    입력
    3
    2 3 1
    
    예상 출력
    1 1
    
  2. 예제 2

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

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

    입력
    6
    1 2 3 4 5 6
    
    예상 출력
    0 6