1828

May 21, 23

Editorial


D2

summary:

$a_l \dots a_r$구간을 정렬하는데 $r-l$ 비용이 든다.

모든 $(l,r)(0\leq l<r < n)$ 구간을 정렬하는 비용의 최솟값의 합을 구하는 문제이다.

description:

$max(a_l\dots a_k)<min(a_{k+1} \dots a_r)$인 경우에

$a_l \dots a_r$을 $a_l \dots a_k$ , $a_{k+1} \dots a_r$의 두개의 구간으로 나누어서 따로 정렬 시킬수 있고, 나누지 않고 $(l,r)$구간을 정렬할 때보다 비용을 1 감소 시킬수 있다.

모든 인덱스 $i$에 대해, $min(a_{k+1} \dots a_r)=a_i$로 고정하고 위 조건에 맞는 (l,k,r)의 개수의 최댓값을 구하자.

$min(a_{k+1} \dots a_r)=a_i$이기 때문에

$r$의 최댓값: $a_y < a_i(i<y)$를 만족하는 $y$의 최솟값-1 이다.

$max(a_l\dots a_k)<min(a_{k+1} \dots a_r)$이기 때문에

$k$의 최댓값: $a_k<a_i(k<i)$를 만족하는 $k$의 최댓값이다.

$l$의 최솟값: $a_x>a_i(x<i)$를 만족하는 $x$의 최댓값+1이다.

즉 $x<l<=k,i<=r<y$이기 때문에 $min(a_{k+1} \dots a_r)=a_i$일때 감소시킬수 있는 비용의 최댓값은 $(y-i)*(k-x)$이 된다.

모든 가능한 구간을 나누지 않고 정렬했을 경우 비용은 $1(n-1)+2(n-2)+3(n-3)+\dots+(n-1)1$ 이 되고, 여기서 모든 $i$에 대해 구한 감소시키는 값들의 합을 빼주면 된다.