만드는 중입니다

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

사전식 순서의 역전 개수

시간 제한2초메모리 제한512 MB

요약
1부터 n까지의 정수를 사전식(문자열) 순서로 정렬했을 때 생기는 역순 쌍의 개수를 구합니다. n은 최대 250000자리입니다.
난이도

어려움10점 중 9점

유형
조합론, 동적 계획법, 문자열
정답자
아직 제출이 없습니다

문제

순열 p=⟨p1,p2,…,pn⟩p = \langle p_1, p_2, \ldots, p_n \rangle에서 역전(inversion)이란 i<ji < j이고 pi>pjp_i > p_j인 정수 쌍 (i,j)(i, j)를 말한다.

양의 정수에 대한 사전식 순서를 생각하자. 이 순서에서는 정수를 십진수 숫자 문자열로 보고 사전순으로 비교한다. 예를 들어 628은 7보다 앞에 오고, 239는 271보다 앞에 오며, 42는 427보다 앞에 온다.

양의 정수 nn이 주어진다. 1부터 nn까지의 모든 정수를 사전식 순서로 정렬하자. 그러면 길이가 nn인 순열 pp를 얻는다. 여기서 p1p_1은 1부터 nn까지의 정수 중 사전식 순서가 가장 앞선 수이고(항상 1이다), p2p_2는 두 번째로 앞선 수이며, 이런 식으로 이어진다.

pp에는 역전이 몇 개 있는가?

입력

입력은 한 줄이며, 앞자리에 0이 없는 양의 정수 nn이 하나 주어진다. nn의 값은 1 이상 10250 000−110^{250\,000} - 1 이하이다. 즉 nn은 최대 250000자리의 십진수이다.

출력

pp의 역전 개수를 앞자리에 0이 없는 정수 하나로 출력한다.

힌트

첫 번째 테스트에서 p=⟨1,10,11,2,3,4,5,6,7,8,9⟩p = \langle 1, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9 \rangle는 역전을 16개 가진다.

예제2

  1. 예제 1

    입력
    11
    
    예상 출력
    16
    
  2. 예제 2

    입력
    427
    
    예상 출력
    26576