Sequence and Queries

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

요약
i에서 시작하는 길이 k의 부분 수열이 j에서 시작하는 것보다 모든 위치에서 작거나 같은 (i, j, k)의 개수를 센다.
난이도

보통10점 중 7점

유형
동적 계획법, 문자열 매칭, 배열
정답자
아직 제출이 없습니다

문제

길이가 nn인 수열 (s_1,s_2,…,s_n)(s\_1,s\_2,\ldots ,s\_n)이 주어진다. 함수 ff는 다음과 같이 정의된다.

\[f(i,j,k) =\begin{cases}1&\text{if } s_{i+t}\leq s_{j+t}\text{ for all } 0\leq t<k\\ 0&\text{otherwise}\end{cases}\]

∑_i=1n∑_j=1n∑_k=1min⁡(n−i+1,n−j+1)f(i,j,k)\sum\_{i=1}^{n}\sum\_{j=1}^{n}\sum\_{k=1}^{\min(n-i+1,n-j+1)}f(i,j,k)의 값을 출력하라.

입력

첫 번째 줄에 수열의 길이를 나타내는 정수 nn이 주어진다.

두 번째 줄에 nn개의 정수 s_1,s_2,…,s_ns\_1,s\_2,\ldots ,s\_n이 공백으로 구분되어 주어진다.

출력

∑_i=1n∑_j=1n∑_k=1min⁡(n−i+1,n−j+1)f(i,j,k)\sum\_{i=1}^{n}\sum\_{j=1}^{n}\sum\_{k=1}^{\min(n-i+1,n-j+1)}f(i,j,k)의 값을 출력한다.

제한

  • 1≤n≤5,0001\leq n\leq 5\\, 000
  • 1≤s_x≤1091\le s\_x\le 10^9 (1≤x≤n1\le x\le n)

힌트

첫 번째 예제에 대한 설명은 다음과 같다.

  • f(1,1,1)=1f(1,1,1) =1
  • f(1,1,2)=1f(1,1,2) =1
  • f(1,2,1)=1f(1,2,1) =1
  • f(2,1,1)=0f(2,1,1) =0
  • f(2,2,1)=1f(2,2,1) =1

예제2

  1. 예제 1

    입력
    2
    2 3
    
    예상 출력
    4
    
  2. 예제 2

    입력
    5
    2 4 2 2 1
    
    예상 출력
    35