만드는 중입니다

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

지그재그 히스토그램 나누기

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

요약
히스토그램을 연속된 구간으로 나누어 각 구간의 최대 직사각형 넓이가 지그재그 수열을 이루게 하고, 구간 수를 최대로 만드는 문제입니다.
난이도

어려움10점 중 8점

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

문제

너비가 11이고 높이가 각각 h1h_1, ⋯\cdots, hNh_N인 직사각형 NN개를 순서대로 이어 붙이면 히스토그램이 된다.

이 히스토그램을 밑변에 수직으로 잘라 여러 조각으로 나눈다. 각 조각의 너비는 양의 정수여야 한다. 조각을 순서대로 나열했을 때, 각 조각에 완전히 포함되는 직사각형 중 넓이가 가장 큰 직사각형의 넓이를 차례로 적은 수열이 지그재그가 되어야 한다. 이 조건을 지키면서 조각의 수를 최대로 하려고 한다.

정확히 말하면, 길이가 nn인 수열 [a1,⋯ ,an][a_1, \cdots, a_n]이 지그재그 수열이라는 것은 다음 두 조건 중 하나 이상을 만족한다는 뜻이다.

  • 모든 1≤i<n1 \leq i < n에 대해, ii가 짝수이면 ai≤ai+1a_i \leq a_{i+1}이고 ii가 홀수이면 ai≥ai+1a_i \geq a_{i+1}이다.
  • 모든 1≤i<n1 \leq i < n에 대해, ii가 짝수이면 ai≥ai+1a_i \geq a_{i+1}이고 ii가 홀수이면 ai≤ai+1a_i \leq a_{i+1}이다.

다음 방법으로 히스토그램을 다른 수열로 바꿀 수 있다.

  • a1=0a_1 = 0, ak+1=Na_{k+1} = N을 만족하는 강증가 수열 [a1,a2,⋯ ,ak+1][a_1, a_2, \cdots, a_{k+1}]을 고른다.
  • 그러면 길이가 kk인 수열 [b1,⋯ ,bk][b_1, \cdots, b_k]가 만들어진다.
  • 각 1≤i≤k1 \leq i \leq k에 대해 bib_i는 ai+1a_i+1번째 직사각형부터 ai+1a_{i+1}번째 직사각형까지를 순서대로 이어 붙인 히스토그램에서 넓이가 가장 큰 직사각형의 넓이이다.

가능한 모든 수열 [a1,⋯ ,ak+1][a_1, \cdots, a_{k+1}]에 대해 얻어지는 수열 [b1,⋯ ,bk][b_1, \cdots, b_k] 중 지그재그 수열인 것의 최대 길이를 구한다.

입력

첫째 줄에 양의 정수 NN이 주어진다. (1≤N≤500 0001 \le N \le 500\,000)

둘째 줄에 공백으로 구분된 양의 정수 h1h_1, ⋯\cdots, hNh_N이 주어진다. (1≤hi≤1091 \le h_i \le 10^{9})

출력

첫째 줄에 문제의 정답을 출력한다.

예제1

  1. 예제 1

    입력
    5
    3 4 5 6 7
    
    예상 출력
    4