å•é¡Œ G : Perm Query
å•é¡Œæ–‡
\{1, 2, … , N\}ã®é †åˆ— (p(1), p(2), … , p(n)) ãŒä¸Žãˆã‚‰ã‚Œã‚‹ï¼Ž
(l_i, r_i) ã‹ã‚‰ãªã‚‹ã‚¯ã‚¨ãƒªãŒ Q 個与ãˆã‚‰ã‚Œã‚‹ã®ã§ï¼Œå„クエリã«å¯¾ã—ã¦ä»¥ä¸‹ã®æ“¬ä¼¼ã‚³ãƒ¼ãƒ‰ã«ã‚ˆã‚‹å‡¦ç†çµæžœã‚’出力ã›ã‚ˆï¼Ž
- ret := 0, (x(1), x(2), … , x(N)) := (1, 2, … , N) ã¨ãŠã.
- å„i ∈ \{1, 2, … , N\} ã«ã¤ã„㦠y(i) := p(x(i)) ã¨ã™ã‚‹ï¼Ž
- å„i ∈ \{1, 2, … , N\} ã«ã¤ã„㦠x(i) = y(i)ã¨ã™ã‚‹ï¼Ž
- ret := ret + x(l_i) + x(l_i+1) + … + x(r_i)
- ã‚‚ã— (x(l_i), x(l_i+1), … , x(r_i)) = (l_i, l_i+1, … , r_i) ãªã‚‰ (ret mod10^9+7) を出力ã—ã¦çµ‚了ã™ã‚‹ï¼Žãã†ã§ãªã„ãªã‚‰ 2 行目ã«æˆ»ã‚‹ï¼Ž
入力形å¼
入力ã¯ä»¥ä¸‹ã®å½¢å¼ã§ä¸Žãˆã‚‰ã‚Œã‚‹
N Q
p(1) p(2) ... p(N)
l_0 r_0
...
l_{Q-1} r_{Q-1}
出力形å¼
å„クエリã«å¯¾ã™ã‚‹å‡ºåŠ›ã‚’1è¡Œãšã¤å‡ºåŠ›ã›ã‚ˆï¼Ž
制約
- 1 ≤ N ≤ 10^5
- 1 ≤ Q ≤ 10^4
- (p_1, p_2, … , p_N) 㯠(1, 2, … , N) ã®é †åˆ—ã«ãªã£ã¦ã„る.
- å„ i ã«å¯¾ã—ã¦ï¼Œã‚ã‚‹ 1 ≤ k ≤ 40 ãŒå˜åœ¨ã—ã¦ï¼Œp^k(i)=i ã¨ãªã‚‹ï¼Žã“ã“ã§ï¼Œp^k(i) 㯠p(p(p(… p(i)… ))) 㧠p ㌠k 回ç¾ã‚Œã‚‹ã‚‚ã®ï¼Ž
- 1 ≤ l_i ≤ r_i ≤ N
入出力例
入力例 1
5 2
5 1 2 3 4
1 1
2 4
出力例 1
15
45
擬似コードä¸ã®é †åˆ—(x(1), x(2), … , x(N))ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«å¤‰åŒ–ã™ã‚‹ï¼Ž
1 2 3 4 5
5 1 2 3 4
4 5 1 2 3
3 4 5 1 2
2 3 4 5 1
1 2 3 4 5
入力例 2
10 5
3 1 2 5 4 10 6 7 9 8
1 10
1 5
3 3
5 10
9 10
出力例 2
660
90
6
178
67