Estructures de dades (4) X67584


Statement
 

pdf   zip

html

Donat un conjunt de números v0, v1, …, vn−1 i una llista de preguntes, responeu-les eficientment.

Les preguntes són del tipus: donats dos números l, r calculeu la suma de tots els elements vi amb lvir, mòdul 1012 + 7. Després de cada pregunta, afegiu el resultat a la llista, de manera que les següents preguntes també consideraran els anteriors resultats.

Per exemple, suposem que tenim els números [1, 2] i ens demanen calcular la suma de l = 1, r = 2. El resultat és 1 + 2 = 3, i la nostre llista passa a ser [1, 2, 3]. Si ara ens demanen calcular la suma de l = 2, r = 15 el resultat seria 2 + 3 = 5. En cas que ara ens demanessin la suma l = 2, r = 2 el resultat seria 2 i, per tant, la nostra llista passaria a ser [1,2,2,3,5]. Si ens tornessin a demanar a suma l = 2, r = 2 ara el resultat seria 4 i la llista seria [1,2,2,3,4,5].

Entrada

L’entrada consisteix en diversos casos, hi ha com a molt 100 casos. Cada cas comença amb una línia amb dos enters 1 ≤ n, q ≤ 5 · 104 - el nombre d’elements del conjunt i el nombre de preguntes. A continuació hi ha una línia amb n enters v0, v1, …, vn−1 amb 0 ≤ vi ≤ 1012 + 7 - els elements del conjunt.

Finalment apareixen q línies, una per cada pregunta. A cada línia hi ha dos enters 0 ≤ lr < 1012 + 7 - els extrems de l’interval del qual es vol calcular la suma.

La suma de les n i la suma de les q de tots els casos són ambdues menors a 5 · 105.

Sortida

Per a cada pregunta, calculeu la suma dels elements vi tal que lvir mòdul 1012 + 7, imprimint una resposta per línia.

Public test cases
  • Input

    2 5
    1 2
    1 2
    1 3
    2 2
    1 2
    4 7
    2 3
    4 1000000000006
    0 3
    0 1000000000007
    0 3
    
    

    Output

    3
    6
    2
    5
    11
    0
    3
    3
    
  • Information
    Author
    Max Balsells
    Language
    Catalan
    Official solutions
    C++
    User solutions