과일 게임

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

요약
1부터 10까지의 값을 갖는 변경 가능한 수열에서, 같은 값이 인접한 두 원소를 합치는 연산을 반복해 부분 수열에서 얻을 수 있는 가장 큰 과일 번호를 구한다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 동적 계획법, 분할 정복, 그리디
정답자
아직 제출이 없습니다

문제

과일 게임은 여러 가지 종류의 과일들을 합쳐 크기가 큰 종류의 과일을 만드는 게임이다. 과일 게임의 게임판은 수열 X\[0],X\[1],⋯ ,X\[K−1]X\[0], X\[1], \cdots , X\[K - 1]로 표현할 수 있다. 이 때 각 수는 과일의 종류에 따른 번호를 나타내며, 번호가 클수록 과일의 크기가 크다는 것을 의미한다.

이 때 플레이어는 종류가 같으며 인접한 두 과일을 합쳐서 크기가 큰 과일을 만들 수 있는 합치기 연산을 수행할 수 있다. 이 연산은 다음과 같이 정의된다.

합치기: X\[0],X\[1],⋯ ,X\[K−1]X\[0], X\[1], \cdots , X\[K - 1]로 표현되는 게임판에서 정수 0≤i≤K−20 ≤ i ≤ K - 2를 골라, X\[i]=X\[i+1]X\[i] = X\[i + 1]을 만족한다면 게임판을 X\[0],⋯ ,X\[i−1],X\[i]+1,X\[i+2],⋯ ,X\[K−1]X\[0], \cdots , X\[i - 1], X\[i] + 1, X\[i + 2], \cdots , X\[K - 1]로 바꾼다.

플레이어의 목표는 초기 게임판이 주어지면 합치기 연산을 00회 이상 사용하여 크기가 큰 과일을 만드는 것이다.

예를 들어서 게임판이 X=\[2,1,1,3,2]X = \[2, 1, 1, 3, 2]인 경우, X\[1]=X\[2]X\[1] = X\[2]이기 때문에 i=1i = 1을 선택하여 합치기 연산을 수행하면 게임판이 X=\[2,2,3,2]X = \[2, 2, 3, 2]로 바뀌게 된다. 또 X\[0]=X\[1]X\[0] = X\[1]이기 때문에 i=0i = 0을 선택하여 합치기 연산을 수행하면 게임판이 X=\[3,3,2]X = \[3, 3, 2]로 바뀌게 된다. 마지막으로 X\[0]=X\[1]X\[0] = X\[1]이기 때문에 i=0i = 0을 선택하여 합치기 연산을 수행하면 게임판이 X=\[4,2]X = \[4, 2]로 바뀌게 된다. 이렇게 하면 번호가 44인 과일을 만들 수 있고, 이것이 얻을 수 있는 가장 큰 과일의 번호이다.

여러분에게 길이 NN의 수열 AA가 주어진다. 이 때 AA의 원소는 중간에 변경될 수 있으며 이 변화는 누적된다. 여러분은 0≤l≤r≤N−10 ≤ l ≤ r ≤ N - 1을 만족하는 정수 순서쌍 (l,r)(l, r)이 주어질 때마다 A\[l],⋯ ,A\[r]A\[l], \cdots , A\[r]로 표현되는 게임판에서 얻을 수 있는 가장 큰 과일의 번호를 구하는 프로그램을 작성해야 한다. 수열의 원소가 변하거나 순서쌍이 주어지는 횟수는 총 QQ번이다.

제한

  • 1≤N,Q≤100,0001 ≤ N, Q ≤ 100\\, 000
  • 모든 ii에 대해 1≤A\[i]≤101 ≤ A\[i] ≤ 10 (0≤i≤N−10 ≤ i ≤ N - 1)
  • 모든 play_game 호출에 대해 0≤l≤r≤N−10 ≤ l ≤ r ≤ N - 1
  • 모든 update_game 호출에 대해 0≤p≤N−10 ≤ p ≤ N - 1, 1≤v≤101 ≤ v ≤ 10

예제

이 문제는 공개된 예제가 없습니다.