Alice는 정수 배열을 이용한 놀이를 즐겨한다.
길이 n인 정수 배열 A가 있을 때 i번째 원소를 A\[i]라 하자 (i=1,2,…,n). 이때 A의 부분배열 A\[i,j]는 i번째 원소부터 j번째 원소까지를 포함한 길이 (j−i+1)인 배열로 정의한다 (1≤i≤j≤n). 예를 들어 A=\[1,3,5,7]이라면 A\[1,2]은 \[1,3]이고 A\[2,4]은 \[3,5,7]이 된다. 참고로 A의 부분 배열은 총 n×(n+1)/2개 존재한다.
각각의 부분배열 A\[i,j]에 대하여 Alice는 아래와 같은 방법으로 점수를 매기기로 했다. 편의상 A\[i,j]의 점수를 Score(i,j)라 하자. (1≤i≤j≤n)
- [규칙 1] 만약 i=j 라면 Score(i,j):=0이다.
- [규칙 2] 만약 i<j 이고 A\[i,j]의 원소 중 중복된 값이 있다면 Score(i,j):=0 이다.
- [규칙 3] 만약 i<j 이고 A\[i,j]의 원소 중 중복된 값이 없다면 Score(i,j):=i(j−i+1)+j(j−i+1) 이다.
예를 들어 A=\[1,1,2] 인 경우를 살펴보자.
- 규칙 1에 따라 Score(1,1)=Score(2,2)=Score(3,3)=0 이다.
- 규칙 2에 따라 Score(1,2)=Score(1,3)=0 이다. 두 경우 모두 부분 배열에 1이 한 번 이상 포함되기 때문이다.
- 규칙 3에 따라 Score(2,3)=22+32=13이다.
다른 예로, A=\[1,3,5,7] 인 경우를 살펴보자.
-
규칙 1에 따라 Score(1,1)=Score(2,2)=Score(3,3)=Score(4,4)=0이다.
-
규칙 2에 해당하는 부분 배열은 없다.
-
규칙 3에 따라 길이 2 이상의 모든 부분 배열의 점수를 구하면 아래와 같다:
- Score(1,2)=12+22=5
- Score(2,3)=22+32=13
- Score(3,4)=32+42=25
- Score(1,3)=13+33=28
- Score(2,4)=23+43=72
- Score(1,4)=14+44=257
정수 배열 A가 주어졌을 때, Alice를 도와 A의 부분배열 점수 총합을 구해보자.