만드는 중입니다

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

순열 쿼리

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

요약
모든 사이클 길이가 40 이하인 순열이 주어질 때, 구간이 항등이 될 때까지 순열을 반복 적용하며 각 단계의 구간 합을 구하는 질의를 처리한다.
난이도

어려움10점 중 8점

유형
수학, 누적 합, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

{1,2,…,N}\{1, 2, \dots, N\}의 순열 (p(1),p(2),…,p(N))(p(1), p(2), \dots, p(N))이 주어진다. (li,ri)(l_i, r_i)로 이루어진 쿼리가 QQ개 주어지므로, 각 쿼리에 대해 다음 의사 코드의 처리 결과를 출력하라.

  1. ret:=0ret := 0, (x(1),x(2),…,x(N)):=(1,2,…,N)(x(1), x(2), \dots, x(N)) := (1, 2, \dots, N)으로 둔다.
  2. 각 i∈{1,2,…,N}i \in \{1, 2, \dots, N\}에 대해 y(i):=p(x(i))y(i) := p(x(i))로 한다.
  3. 각 i∈{1,2,…,N}i \in \{1, 2, \dots, N\}에 대해 x(i)=y(i)x(i) = y(i)로 한다.
  4. ret:=ret+x(li)+x(li+1)+⋯+x(ri)ret := ret + x(l_i) + x(l_i+1) + \dots + x(r_i)
  5. 만약 (x(li),x(li+1),…,x(ri))=(li,li+1,…,ri)(x(l_i), x(l_i+1), \dots, x(r_i)) = (l_i, l_i+1, \dots, r_i)이면 (ret mod 109+7)(ret \bmod 10^9+7)을 출력하고 종료한다. 그렇지 않으면 2번으로 돌아간다.

입력

입력은 다음 형식으로 주어진다.

NN QQ

p(1)p(1) p(2)p(2) …\dots p(N)p(N)

l1l_1 r1r_1

…\dots

lQl_Q rQr_Q

출력

각 쿼리에 대한 출력을 한 줄에 하나씩 출력하라.

제한

  • 1≤N≤1051 \le N \le 10^5
  • 1≤Q≤1041 \le Q \le 10^4
  • (p(1),p(2),…,p(N))(p(1), p(2), \dots, p(N))은 (1,2,…,N)(1, 2, \dots, N)의 순열이다.
  • 각 ii에 대해, 어떤 1≤k≤401 \le k \le 40이 존재하여 pk(i)=ip^k(i) = i이다. 여기서 pk(i)p^k(i)는 p(p(p(…p(i)… )))p(p(p(\dots p(i) \dots)))로 pp가 kk번 나타나는 것이다.
  • 1≤li≤ri≤N1 \le l_i \le r_i \le N

예제2

  1. 예제 1

    입력
    5 2
    5 1 2 3 4
    1 1
    2 4
    
    예상 출력
    15
    45
    
  2. 예제 2

    입력
    10 5
    3 1 2 5 4 10 6 7 9 8
    1 10
    1 5
    3 3
    5 10
    9 10
    
    예상 출력
    660
    90
    6
    178
    67