모든 연속 부분 배열에 대해 합에서 최대 증가 부분 수열의 합을 뺀 값의 최댓값을 구하고, 그 값을 내는 가장 짧은 연속 부분 배열의 개수를 센다.
어려움8동적 계획법누적 합세그먼트 트리그리디아직 제출이 없습니다시간 제한2초메모리 제한512 MB정수 N개로 이루어진 수열 A=A0,A1,…,AN−1이 있다. 부분 수열, 증가 부분 수열, 연속 부분 수열의 정의는 다음과 같다.
A=[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,3],[1,3]이다.
수열에서 정의하는 함수는 다음 세 가지다.
수열의 좋음 g는 g=maxf(l,r) (0≤l≤r<N)로 정의한다. 즉 g는 A의 모든 연속 부분 수열의 f(l,r) 중 가장 큰 값이다.
정수 m은 f(l,r)=g인 연속 부분 수열의 길이 중 가장 작은 값이다.
A가 주어졌을 때 먼저 g를 구하고, r−l+1=m이면서 f(l,r)=g인 연속 부분 수열의 개수를 구하는 프로그램을 작성하시오.
첫째 줄에 정수 N (1≤N≤200,000)이 주어진다. 둘째 줄에 A0,A1,…,AN−1이 공백으로 구분되어 주어진다. (−40≤Ai≤40)
정수 두 개를 공백으로 구분해 한 줄에 출력한다. 첫 번째 정수는 주어진 수열의 g이고, 두 번째 정수는 r−l+1=m이면서 f(l,r)=g인 연속 부분 수열의 개수이다.