창하의 수열 뒤집기 이야기
시간 제한1초메모리 제한1024 MB
길이 2^k인 수열 A와 -1, 0, 1로 이루어진 B가 주어지고, 각 B_i가 정해진 구간 뒤집기 시행 여부를 결정할 때, 갱신마다 얻을 수 있는 합의 최댓값을 구한다.
문제
길이 N$$(N=2^k)인 수열 와 길이 인 수열 가 주어진다. 의 값은 , , 중 하나이다. 연산 를 다음과 같이 정의하자.
- 연산 : 수열 의 번째부터 번째 까지의 모든 원소에 을 곱한다.
창하는 에 이상 이하의 정수를 오름차순으로 차례로 대입하며 아래 절차를 총 번 반복한다.
- 이면, 연산 를 시행한다.
- 이면, 아무것도 하지 않는다.
- 이면, 연산 를 시행하거나 아무것도 하지 않는다.
창하는 시행이 끝났을 때 의 모든 원소들의 합의 최댓값을 알고 싶다. 하지만 와 는 총 번 수정되며, 초기 상태와 각 수정 이후의 모든 와 에 대해 뒤집기 시행 후 이 가질 수 있는 최댓값을 구해야 한다. 각 수정은 이후의 수정에도 영향을 미치며, 실제로 뒤집기를 시행하지는 않는다. 머리가 아픈 창하를 도와주자!
입력
첫 번째 줄에 정수 k$$(1\le k \le 18)가 주어진다.
두 번째 줄에 개의 정수 가 공백으로 구분되어 주어진다.
세 번째 줄에 개의 정수 이 공백으로 구분되어 주어진다.
네 번째 줄에 정수 Q$$(1\le Q \le 10^5)가 주어진다.
다음 개의 줄에 쿼리들의 정보가 주어지며, 각 줄에는 문자 , 두 개의 정수 , 가 공백으로 구분되어 주어진다. (c \in \\{AB\\})
-
A인 경우 의 값을 로 변경하는 것을 의미한다. -
B인 경우 의 값을 로 변경하는 것을 의미한다.
출력
첫 번째 줄에 수정 전 초기 상태의 와 에서 시행이 끝났을 때 가능한 의 최댓값을 출력한다.
다음 개의 줄 중 번째 줄에 번째까지 수정을 거친 수열 와 에서 시행이 끝났을 때 가능한 의 최댓값을 출력한다.
힌트
는 를 넘지 않는 최대 정수를 의미한다.