말 팔기
시간 제한2초메모리 제한512 MB
매년 X[i]배로 늘어나는 말 중 원하는 만큼을 가격 Y[i]에 팔아 최대 수익을 구하고 매 수정 후 값을 1,000,000,007로 나눈 나머지로 보고합니다.
문제
만수르는 말을 키운다. 지금은 카자흐스탄에서 말을 가장 많이 가진 사람이지만, 년 전에는 그저 젊은이였고 말도 한 마리뿐이었다.
해에 시간 순서대로 0번부터 번까지 번호를 매긴다. 번 해가 가장 최근이다. 번 해의 날씨는 말이 불어나는 정도를 정하고, 그 비율은 양의 정수 이다. 번 해 연초에 말이 마리 있었다면 그 해 연말에는 마리가 된다.
말은 연말에만 판다. 번 해 연말의 말값은 한 마리에 양의 정수 이고, 그 해 연말에 가진 말 중 몇 마리를 팔지에는 제한이 없다.
만수르는 지난 년 동안 파는 시기를 가장 잘 골랐다면 돈을 얼마나 벌 수 있었을지 궁금하다. 저녁 동안 기억이 점점 또렷해져서 만수르는 값을 번 고친다. 한 번 고칠 때마다 하나 또는 하나가 새 값으로 바뀌고, 고친 내용은 그대로 쌓인다. 같은 자리를 여러 번 고치기도 한다.
처음 값으로 벌 수 있는 돈의 최댓값과, 값을 한 번 고칠 때마다 벌 수 있는 돈의 최댓값을 구한다. 답이 매우 클 수 있으므로 로 나눈 나머지를 출력한다.
입력
첫째 줄에 해의 수 이 주어진다.
둘째 줄에 부터 까지 개의 정수가 공백으로 구분되어 주어진다.
셋째 줄에 부터 까지 개의 정수가 공백으로 구분되어 주어진다.
넷째 줄에 고치는 횟수 이 주어진다.
이어지는 개의 줄에는 고치는 내용이 한 줄에 하나씩 type pos val 형식으로 주어진다. type이 1이면 를 val로 바꾸고, 2이면 를 val로 바꾼다.
제한:
- , (처음 값도, 고친 뒤의 값도 모두 이 범위에 있다)
type은 1 또는 2이고, ,
출력
개의 줄을 출력한다.
첫째 줄에는 처음 값으로 벌 수 있는 돈의 최댓값을 출력한다. 이어지는 번째 줄에는 앞에서부터 개의 수정을 모두 반영한 뒤 벌 수 있는 돈의 최댓값을 출력한다.
각 값은 로 나눈 나머지이다.