수열의 좋음

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

어려움8동적 계획법누적 합세그먼트 트리그리디아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

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

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

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

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

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

입력

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

출력

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