아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

피보나치와 마지막 수열과 쿼리

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

요약
모든 값이 0인 수열에서 구간 l부터 r까지를 F_1부터 F_{r-l+1}로 바꾸는 쿼리를 순서대로 적용한 뒤, 최종 수열을 10^9+7로 나눈 나머지로 출력한다.
난이도

보통10점 중 6점

유형
누적 합, 수학, 배열, 구현
정답자
아직 제출이 없습니다

문제

피보나치 수는 11로 시작한다. 00번째 피보나치 수는 11이고, 11번째 피보나치 수는 11이다. 22번째 피보나치 수부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 표현하면 F_n=F_n−2+F_n−1F\_n = F\_{n-2} + F\_{n-1} (n≥2n \geq 2)이 된다.

nn번째 피보나치 수 하나는 쉽게 구할 수 있지만, 이번 문제는 호락호락하지 않다. 모든 값이 00인 길이 NN의 수열이 주어진다. 이때, 다음 쿼리를 주어진 순서대로 수행한 후의 결과를 출력하는 프로그램을 작성해보자.

  • l r : 수열의 ll번째 위치부터 rr번째 위치까지의 값들을 각각 F_1,F_2,⋯ ,F_r−l+1F\_1, F\_2, \cdots , F\_{r-l+1}로 바꾼다.

입력

첫째 줄에 수열의 크기 NN이 주어진다. (1≤N≤1 000 0001 \leq N \leq 1\ 000\ 000)

둘째 줄에 쿼리의 개수 QQ가 주어진다. (1≤Q≤1 000 0001 \leq Q \leq 1\ 000\ 000)

셋째 줄부터 QQ개 줄에 걸쳐 쿼리에 대한 정보 ll, rr이 주어진다. (1≤l≤r≤N1 \leq l \leq r \leq N)

입력으로 주어지는 모든 수는 정수이다.

출력

모든 쿼리를 순서대로 적용한 후, 수열의 모든 수를 공백으로 구분해 출력한다. 단, 수가 너무 커질 수 있으니 각각의 수를 109+710^9+7으로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

    입력
    10
    2
    1 10
    6 10
    
    예상 출력
    1 2 3 5 8 1 2 3 5 8
    
  2. 예제 2

    입력
    8
    1
    2 7
    
    예상 출력
    0 1 2 3 5 8 13 0