피보나치와 수열과 쿼리
시간 제한1초메모리 제한1024 MB
길이 N인 0 배열에서 각 질의가 위치 l부터 r까지 피보나치 수 F1..F(r-l+1)을 더할 때, 모든 질의를 처리한 뒤 배열을 1e9+7로 나눈 나머지를 출력한다.
문제
피보나치 수는 과 로 시작한다. 번째 피보나치 수는 이고, 번째 피보나치 수는 이다. 번째 피보나치 수부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 표현하면 ()이다.
번째 피보나치 수 하나는 위 점화식으로 쉽게 구할 수 있지만, 이번 문제는 그렇게 간단하지 않다. 모든 값이 인 길이 의 수열이 주어진다. 다음 쿼리를 모두 수행한 후의 결과를 출력하는 프로그램을 작성해보자.
l r: 수열의 번째 위치부터 번째 위치까지 각각 을 더한다.
입력
첫째 줄에 수열의 크기 이 주어진다. ()
둘째 줄에 쿼리의 개수 가 주어진다. ()
셋째 줄부터 개 줄에 걸쳐 쿼리에 대한 정보 , 이 주어진다. ()
출력
모든 쿼리를 적용한 후, 수열의 모든 수를 공백으로 구분해 출력한다. 단, 수가 너무 커질 수 있으니 각각의 수를 으로 나눈 나머지를 출력한다.