만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

수열과 개구리

면접 대비

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

요약
배열 a와 b가 주어질 때, 개구리가 x에서 출발해 매번 b_x초를 기다린 뒤 a_x만큼 좌우로 뜁니다. 각 시작 위치에서 배열 밖으로 나가는 가장 빠른 시간을 구합니다.
난이도

보통10점 중 6점

유형
그래프, 최단 경로
정답자
아직 제출이 없습니다

문제

길이가 nn이고 양의 정수로 이루어진 수열 aa와 bb가 있습니다. 두 수열의 인덱스는 11부터 시작합니다.

이 수열 위에 개구리 한 마리가 있습니다. 개구리는 처음에 정수 위치 1≤x≤n1 \le x \le n 중 한 곳에서 출발합니다. 자신의 위치가 수열 밖이 될 때까지 다음 과정을 반복합니다.

  • bxb_x초 동안 기다린 뒤, 위치 x−axx-a_x 또는 위치 x+axx+a_x로 이동합니다. 이동한 위치가 xx의 새로운 값이 됩니다.

시작 위치 xx에서 출발할 때, 개구리의 위치가 수열 밖이 될 수 있는 최초의 시각을 f(x)f(x)초라고 정의합니다. f(1),f(2),⋯ ,f(n)f(1),f(2),\cdots,f(n)의 값을 모두 구해야 합니다.

†^\dagger 어떤 위치 xx에 대해서, 1≤x≤n1 \le x \le n이면 수열 안, x<1x<1 또는 x>nx>n이면 수열 밖이라고 부릅니다.

입력

첫 번째 줄에 두 수열의 길이 nn이 주어집니다. (1≤n≤2⋅1051 \le n \le 2 \cdot 10^5)

두 번째 줄에 nn개의 정수 a1,a2,…,ana_1,a_2,\dots,a_n이 공백으로 구분되어 주어집니다. (1≤ai≤n1 \le a_i \le n)

세 번째 줄에 nn개의 정수 b1,b2,…,bnb_1,b_2,\dots,b_n이 공백으로 구분되어 주어집니다. (1≤bi≤1061 \le b_i \le 10^6)

출력

f(1),f(2),⋯ ,f(n)f(1),f(2),\cdots,f(n)의 값을 순서대로 공백으로 구분하여 한 줄에 출력합니다.

이 문제의 제한에 따라 모든 1≤i≤n1 \le i \le n에 대해 f(i)f(i)가 유한함을 증명할 수 있습니다.

힌트

출력이 32비트 정수의 최댓값을 넘을 수 있습니다. 값을 저장할 때는 다음 자료형을 사용하세요.

  • C/C++: long long
  • Java: long
  • Python: int (별도의 처리는 필요하지 않습니다.)
  • 그 밖의 언어: 해당 언어의 레퍼런스를 참고합니다.

예제1

  1. 예제 1

    입력
    5
    3 4 2 5 1
    2 5 1 4 3
    
    예상 출력
    2 5 3 4 3