Alice는 정수 배열을 이용한 구간합 놀이를 즐겨하는데, 아래와 같은 순서로 게임을 진행한다.
- 먼저, 길이 n인 정수 배열 A를 만든다. A의 원소가 A\[1], …, A\[n]이라 했을 때 이 n개의 값은 모두 달라야 한다.
- 다음으로, 배열 A의 구간을 나타내는 m개의 정수 쌍 (x\[1],y\[1]), …, (x\[m],y\[m])을 고른다. 이 때 1≤x\[i]≤y\[i]≤n 을 만족해야한다.
- 배열 A와 x, y를 이용하여 구간합 S(A,x,y)을 다음과 같이 정의한다: S(A,x,y):=∑_1≤j≤m(∑_x\[j]≤i≤y\[j]A\[i])
- 이 게임의 목표는 배열 A의 원소를 임의로 재배열하여 S(A,x,y)값을 최대로 만드는 것이다. A의 원소가 n개이므로 총 n! 가지의 방법으로 A의 원소를 재배열할 수 있다.
예를 들어, n=3, m=2, A=\[10,100,1000] 이고 x=\[1,2], y=\[2,2]라 하자. n=3 이므로 A의 원소를 재배열하여 얻을 수 있는 배열은 총 여섯 종류가 있다. 원래의 배열 A와 구분하기 위해 이를 배열 B라 하자.
- B=\[10,100,1000] 일 때, S(B,x,y)=(10+100)+(100)=210.
- B=\[10,1000,100] 일 때, S(B,x,y)=(10+1000)+(1000)=2010.
- B=\[100,10,1000] 일 때, S(B,x,y)=(100+10)+(10)=120.
- B=\[100,1000,10] 일 때, S(B,x,y)=(100+1000)+(1000)=2100.
- B=\[1000,10,100] 일 때, S(B,x,y)=(1000+10)+(10)=1020.
- B=\[1000,100,10] 일 때, S(B,x,y)=(1000+100)+(100)=1200.
이 경우 S(A,x,y)의 최댓값은 2100이며, 네 번째 경우인 B=\[100,1000,10]를 통해 얻을 수 있다.
다른 예로, n=2, m=1, A=\[20,22] 이고 x=\[1], y=\[2]라 하자. n=2 이므로 A의 원소를 재배열하여 얻을 수 있는 배열은 총 두 종류가 있다. 원래의 배열 A와 구분하기 위해 이를 배열 B라 하자.
- B=\[20,22] 일 때, S(B,x,y)=(20+22)=42.
- B=\[22,20] 일 때, S(B,x,y)=(22+20)=42.
이 경우 S(A,x,y)의 최댓값은 42이며, 두 가지 다른 방법을 통해 얻을 수 있다.
A, x, y가 주어졌을 때 Alice가 A의 원소를 재배열하여 달성할 수 있는 S(A,x,y)의 최댓값을 구하고, 몇 가지 다른 방법으로 최댓값을 달성할 수 있는지 구해보자.