시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 | 512 MB | 246 | 71 | 56 | 30.939% |
만수르는 조상들과 마찬가지로 말을 키우는 것을 좋아한다. 그는 카자흐스탄에서 말을 제일 많이 갖고 있다. 그렇지만 꼭 항상 그랬던 것은 아닌데, N년 전에만 해도 만수르는 그저 젊은이일 뿐이어서 말이 한마리밖에 없었다. 만수르는 돈을 많이 벌어서 부자가 되고 싶었다.
시간순으로 매 해를 0번 해부터 N-1번 해로 번호를 매기자. (즉, N-1번 해가 가장 최근이다.) 해마다 날씨는 말이 자라는데 영향을 미친다. 만수르가 기억하기로는, i번 해에 말의 마릿수가 늘어난 비율은 양의 정수 X[i]이다. 만약 i번 해 연초에 말이 h마리가 있었다면, 그 해 연말에는 말이 모두 h×X[i]마리가 된다.
말은 매해 연말에만 팔 수 있다. 만수르가 기억하기로 i번 해의 말값은 양의 정수 Y[i]였다. 즉, 매해 연말에 갖고 있는 말 중 팔 수 있는 말의 수에는 제약이 없고, 말 한마리 값은 Y[i]로 모두 같다.
만수르는 지난 N년 동안, 말을 파는 시기를 잘 정했다면 얼마나 많은 돈을 벌 수 있었을지가 궁금해졌다. 당신이 만수르를 방문했을 때 이 질문을 받게 되었다.
저녁동안 만수르의 기억은 점점 정확해져서, 총 M번의 수정을 하게 된다. 수정을 한 번 할 때마다 X[i]의 값 중 하나, 또는 Y[i]의 값 중 하나가 바뀐다. 수정을 한 번 할 때마다 만수르는 말을 팔아 서 벌 수 있는 돈의 최댓값을 물어본다. 만수르가 수정할 때마다, 수정된 내용들은 누적된다. 즉, 만수르에게 대답할 때는 지금까지 만수르가 한 수정들을 모두 반영해야 한다. 한 X[i] 또는 Y[i]가 여러 번 수정되는 경우도 가능하다.
만수르의 질문에 대한 답은 매우 큰 수일 수 있다. 큰 수를 다룰 때 생기는 문제를 피하기 위해서, 답을 109+7로 나눈 나머지를 알려주면 된다.
N = 3년에 대해서 다음과 같은 정보가 주어졌다고 하자.
0 | 1 | 2 | |
---|---|---|---|
X | 2 | 1 | 3 |
Y | 3 | 4 | 1 |
이 초기 정보를 가지고, 만수르는 1번 해 연말에 모든 말을 다 팔았다면 가장 많은 돈을 벌 수 있다. 전체 과정은 다음과 같다.
이제, M = 1번 수정을 하여 Y[1]이 2로 바뀌었다.
수정 후의 정보는 다음과 같다.
0 | 1 | 2 | |
---|---|---|---|
X | 2 | 1 | 3 |
Y | 3 | 2 | 1 |
이 경우, 최적해 중 하나는 한 마리를 0번 해 연말에 팔고 2번 해 연말에 세 마리를 파는 것이다. 전체 과정은 다음과 같다
N, X, Y와 수정된 내용의 리스트가 주어진다. 첫 번째 수정을 하기 전과, 매번 수정을 한 다음에 대해서 만수르가 말을 팔아서 벌 수 있는 돈의 최댓값을 109+7로 나눈 나머지를 구하라. 이를 위해서 함수 init, updateX, updateY를 구현해야 한다.
모든 X[i]와 Y[i]의 값은 항상 (즉, 처음에도, 매번 수정을 한 다음에도) 1이상 109이하를 만족한다.
init을 호출한 후, 그레이더는 updateX와 updateY를 여러 번 호출할 것이다. updateX와 updateY의 전체 호출 회수는 M이다.
처음 init의 리턴값을 출력하고, 차례로 updateX와 updateY의 모든 호출에 대한 리턴값을 출력한다.
번호 | 배점 | 제한 |
---|---|---|
1 | 17 | 1 ≤ N ≤ 10, M = 0, X[i], Y[i] ≤ 10, X[0] · X[1] · ... · X[N-1] ≤ 1,000 |
2 | 17 | 1 ≤ N ≤ 1,000, 0 ≤ M ≤ 1,000 |
3 | 20 | 1 ≤ N ≤ 500,000, 0 ≤ M ≤ 100,000, init과 updateX에 대해서 각각 X[i] ≥ 2 이고 val ≥ 2 |
4 | 23 | 1 ≤ N ≤ 500,000, 0 ≤ M ≤ 10,000 |
5 | 23 | 1 ≤ N ≤ 500,000, 0 ≤ M ≤ 100,000 |
3 2 1 3 3 4 1 1 2 1 2
8 6
Olympiad > International Olympiad in Informatics > IOI 2015 > Day 2 4번