다음 정렬 알고리즘을 고려해보자:
reverse-sort(순열 A) while(A가 감소하지 않는 순서일 때까지) A를 slope의 수가 최소가 되도록 분할 길이가 1보다 큰 모든 slope에 대해 reverse(slope)slope는 A의 감소하면서 연속적인 부분수열로 정의한다. reverse함수는 slope의 원소들의 순서를 뒤집는 과정을 수행한다. 당신에게 최소 개수의 slope로 분할하면 slope의 길이가 모두 짝수가 되는 처음 N개의 자연수(1~N 까지의 자연수)로 이루어진 순열이 주어질 것이다.
주어진 순열을 reverse-sort했을때 reverse가 몇번 호출되는지 구하여라.
reverse-sort(sequence aa) aa while (aa is not in nondecreasing order) aa partition aa into the minimum number of slopes aa for every slope with length greater than one reverse(slope)A slope is defined as a decreasing consecutive subsequence of a. The reverse procedure will reverse the order of the elements in a slope.
You are given a permutation of the first N natural numbers whose slopes all have even length when partitioned for the first time. Determine the total number of times reverse is called to reverse-sort the given permutation.
input 2 2 1 output 1 input 4 4 3 2 1 output 1 input 4 3 1 4 2 output 3
출처:coci 2011 contest1 5/6 번역:august14