만드는 중입니다

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

수열과 쿼리

면접 대비

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

요약
길이 n인 수열에서 i와 j부터 시작하는 구간이 k개 원소 동안 s[i+t] <= s[j+t]를 만족하는 (i, j, k) 세 쌍의 개수를 구합니다.
난이도

보통10점 중 4점

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

문제

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

f(i,j,k)={1if si+t≤sj+t for all 0≤t<k0otherwisef(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개의 정수 s1,s2,…,sns_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≤sx≤1091\leq s_x\leq 10^9 (1≤x≤n1\leq x\leq n)

힌트

i=ji = j인 경우 모든 tt에 대해 si+t≤si+ts_{i+t} \leq s_{i+t}가 성립하므로 f(i,i,k)f(i,i,k)는 항상 1이다.

예제2

  1. 예제 1

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

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