Baronus

Time limit: 1.5s Memory limit: 256MB Input: Output:

La o companie de făurit cărți de joc lucrează NN angajați. Pentru simplitate, îi vom numerota (angajații 1,2,3,,N1, 2, 3, \dots, N)

Baronul Job al III-lea, fiind proprietarul companiei, dorește ca compania să aibă o structură bine-definită. Deoarece această companie are o grămadă de pachete de toate felurile, acesta va folosi unul dintre ele pentru a stabili structura companiei.

Pachetul are exact NN cărți, numerotate de la 11 la NN. Fiecare angajat va primi câte o carte diferită dintre cele NN. Deoarece Baronul este foarte parțial (adică nu e imparțial), el va alege ce carte va primi fiecare angajat (angajatul ii va primi cartea cu numărul pip_i).

Baronul preferă mereu angajații cu cărți care au numere mai mari. Pentru el, autoritatea este direct proporțională cu numărul de pe carte. Astfel, dacă privim întreaga companie, persoana care deține cartea cu număr maxim va deveni Directorul Suprem al companiei.

Dar Baronul nu se oprește aici. El nu stabilește structura doar global, ci și local, pe departamente. Un departament reprezintă un grup de angajați consecutivi, de la ll la rr. În acel departament, regulile sunt simple:

  • Șeful acelui departament este persoana cu numărul maxim al cărții. Această persoană este șefa tuturor angajaților din acel departament.
  • Angajații aflați în stânga acestei persoane (de la ll la poziția ei minus 1) reprezintă un sub-departament (dacă aceștia există).
  • Angajații aflați în dreapta acestei persoane (de la poziția ei plus 1 la rr) reprezintă un sub-departament (dacă aceștia există).
  • Fiecare sub-departament aplică aceleași reguli.

Observăm că un angajat poate avea mai mulți șefi.

Baronul are QQ sponsori pentru companie, iar fiecare sponsor are o întrebare pentru el. Din departamentul cu angajații de la LL la RR, ne interesează fiecare sub-departament al său.

Pentru fiecare sub-departament de la ll la rr, acesta trebuie să construiască structura ierarhică la fel ca mai sus, și să calculeze influența s(i)s(i) a fiecărui angajat, adică numărul de angajați care îl au pe acesta ca șef. Sponsorii sunt interesați de suma influențelor angajaților din acest sub-departament. Mai formal, Baronul trebuie să calculeze valoarea

f(l,r)=i=lrs(i)f(l, r) = \sum_{i=l}^r s(i)

Însă sponsorii sunt mai curioși de atât. Aceștia vor să afle suma acestor valori. Mai formal, Baronul trebuie să calculeze valoarea

F(L,R)=l=LRr=lRf(l,r)F(L, R) = \sum_{l=L}^R \sum_{r=l}^R f(l,r)

Deoarece aceste valori pot fi foarte mari, sponsorii sunt doar interesați de restul lor modulo 109+710^9+7.

Însă, Baronul este foarte ocupat cu căutatul monedelor căzute pe podea, așa că cere ajutorul vostru.

Date de intrare

Prima linie va conține două numere naturale NN și QQ. A doua linie conține șirul p1,p2,,pNp_1, p_2, \dots, p_N. Următoarele QQ linii conțin câte două numere naturale LL și RR.

Date de ieșire

Pentru fiecare întrebare se afișează pe o linie valoarea corespunzătoare a F(L,R)F(L,R), modulo 109+710^9+7.

Restricții și precizări

  • 1N,Q500 0001 \leq N, Q \leq 500 \ 000
  • 1LRN1 \leq L \leq R \leq N pentru toate întrebările.
  • Se garantează că șirul p1,p2,,pnp_1, p_2, \dots, p_n este o permutare a mulțimii {1,2,,n}\{1, 2, \dots, n\}.
  • Un angajat nu este propriul lui șef.
  • Notăm cu DD numărul de indici ii astfel încât 1i<N1 \leq i < N și pi>pi+1p_i > p_{i+1}
  • Notăm cu MM numărul de indici ii astfel încât pi>pjp_i > p_j pentru orice jj, 1j<i1 \leq j < i
Subtask Restricții Punctaj
0 Exemplul 00
1 N,Q40N,Q \leq 40 22
2 N,Q100N,Q \leq 100 33
3 N,Q500N,Q \leq 500 55
4 N,Q2 000N,Q \leq 2 \ 000 1212
5 p1<p2<<pNp_1 < p_2 < \dots < p_N 77
6 N,Q100 000,D1 000N,Q \leq 100 \ 000, D \leq 1 \ 000 1212
7 N,Q100 000,M1 000N,Q \leq 100 \ 000, M \leq 1 \ 000 1212
8 N,Q100 000,L=1N,Q \leq 100 \ 000, L = 1 pentru toate întrebările 88
9 N,Q100 000N,Q \leq 100 \ 000 2222
10 Fără alte restricții 1717

Exemplu

stdin

3 2
2 1 3
1 2
1 3

stdout

1
5	

Explicație

Pentru primul sponsor, avem

F(1,2)=f(1,1)+f(2,2)+f(1,2)=0+0+1=1F(1, 2) = f(1, 1) + f(2, 2) + f(1, 2) = 0 + 0 + 1 = 1

Pentru al doilea sponsor, avem

F(1,3)=f(1,1)+f(2,2)+f(3,3)+f(1,2)+f(2,3)+f(1,3)=0+0+0+1+1+3=5F(1, 3) = f(1, 1) + f(2, 2) + f(3, 3) + f(1, 2) + f(2, 3) + f(1, 3) = 0 + 0 + 0 + 1 + 1 + 3 = 5

Log in or sign up to be able to send submissions!