수열의 좋음
시간 제한2초메모리 제한512 MB
모든 연속 부분 배열에 대해 합에서 최대 증가 부분 수열의 합을 뺀 값의 최댓값을 구하고, 그 값을 내는 가장 짧은 연속 부분 배열의 개수를 센다.
문제
정수 개로 이루어진 수열 이 있다. 부분 수열, 증가 부분 수열, 연속 부분 수열의 정의는 다음과 같다.
- 부분 수열: 수열 에서 개 이상의 수를 지워서 만드는 수열. 지우지 않은 수의 순서는 바꾸지 않는다. 크기가 인 부분 수열도 있으며, 이를 빈 부분 수열이라고 한다.
- 증가 부분 수열: 길이가 이상인 부분 수열 중에서, 각각의 수가 바로 앞의 수보다 큰 것.
- 연속 부분 수열: 지우지 않은 수가 원래 수열 에서 서로 이웃한 부분 수열. 의 번째 수부터 번째 수까지로 이루어진 연속 부분 수열을 로 쓴다. ()
이면 부분 수열은 이고, 연속 부분 수열은 이며, 증가 부분 수열은 이다.
수열에서 정의하는 함수는 다음 세 가지다.
- : 의 증가 부분 수열 중에서 원소의 합이 가장 큰 값
수열의 좋음 는 ()로 정의한다. 즉 는 의 모든 연속 부분 수열의 중 가장 큰 값이다.
정수 은 인 연속 부분 수열의 길이 중 가장 작은 값이다.
가 주어졌을 때 먼저 를 구하고, 이면서 인 연속 부분 수열의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 ()이 주어진다. 둘째 줄에 이 공백으로 구분되어 주어진다. ()
출력
정수 두 개를 공백으로 구분해 한 줄에 출력한다. 첫 번째 정수는 주어진 수열의 이고, 두 번째 정수는 이면서 인 연속 부분 수열의 개수이다.