puterea-p

Time limit: 1.3s Memory limit: 256MB Input: puterea-p.in Output: puterea-p.out

Pentru orice șir de numere, definim noțiunile de putere a unei valori și de putere totală.

Fie a=(a1,a2,,aL)a = (a_1, a_2, \dots, a_L) un șir de LL numere și fie PP o valoare care apare în acest șir. Notăm cu freqPfreq_P numărul de poziții ii (cu 1iL1 \le i \le L) pentru care ai=Pa_i = P. Puterea valorii PP în șirul aa este definită ca

freqP(LfreqP)freq_P \cdot (L - freq_P)

Puterea totală a șirului aa este suma puterilor tuturor valorilor distincte care apar în aa (fiecare valoare distinctă fiind luată în calcul o singură dată):

Putere(a)=P valoare distincta˘din afreqP(LfreqP)\text{Putere}(a) = \sum_{\substack{P\text{ valoare distinctă} \\ \text{din } a}} freq_P \cdot (L - freq_P)

Cerință

Se citește o valoare C{1,2}C \in \{1, 2\}, care precizează tipul cerinței.

Cerința 1 (C=1C = 1). Se dă un șir s=(s1,s2,,sN)s = (s_1, s_2, \dots, s_N) și QQ operații. O operație este descrisă printr-o pereche (pos,val)(pos, val) și constă în atribuirea sposvals_{pos} \leftarrow val. Operațiile se aplică în ordinea în care sunt date, iar efectele lor sunt persistente (fiecare operație modifică șirul curent).

Înainte de aplicarea oricărei operații, precum și după fiecare operație, trebuie să calculați suma puterilor totale ale tuturor subsecvențelor șirului ss, fiecare subsecvență fiind considerată separat. O subsecvență este formată din elementele aflate pe poziții consecutive, adică (sl,sl+1,,sr)(s_l, s_{l+1}, \dots, s_r) pentru 1lrN1 \le l \le r \le N.

Cerința 2 (C=2C = 2). Se dă un arbore cu NN noduri, numerotate de la 11 la NN. Fiecare nod ii conține valoarea sis_i. Se dau, de asemenea, QQ operații de forma (pos,val)(pos, val), cu același efect ca mai sus: valoarea nodului pospos devine valval, modificările fiind persistente.

Înainte de aplicarea oricărei operații, precum și după fiecare operație, trebuie să calculați suma puterilor totale ale tuturor lanțurilor din arbore, fiecare lanț fiind considerat separat o singură dată. Un lanț este determinat de o pereche de noduri (u,v)(u, v), cu 1uvN1 \le u \le v \le N, și este format din șirul valorilor nodurilor aflate pe drumul simplu (unic în arbore) dintre uu și vv.

În ambele cerințe, deoarece rezultatele pot fi foarte mari, fiecare valoare cerută se va afișa modulo 109+710^9 + 7.

Date de intrare

Prima linie conține un întreg CC, egal cu 11 sau cu 22, reprezentând tipul cerinței.

A doua linie conține întregul NN, numărul de elemente ale șirului (respectiv numărul de noduri ale arborelui dacă C=2C = 2).

A treia linie conține cele NN valori s1,s2,,sNs_1, s_2, \dots, s_N, separate prin spații.

Dacă C=1C = 1:

  • linia următoare conține întregul QQ, numărul de operații;
  • fiecare dintre următoarele QQ linii conține doi întregi pospos și valval, descriind o operație.

Dacă C=2C = 2:

  • următoarele N1N - 1 linii descriu muchiile arborelui; fiecare conține doi întregi uu și vv, ceea ce înseamnă că există o muchie între nodurile uu și vv;
  • linia următoare conține întregul QQ, numărul de operații;
  • fiecare dintre următoarele QQ linii conține doi întregi pospos și valval, descriind o operație.

Date de ieșire

Se vor afișa Q+1Q + 1 linii. Prima linie conține rezultatul calculat pentru configurația inițială, înainte de aplicarea oricărei operații. Pentru fiecare kk cu 1kQ1 \le k \le Q, linia k+1k + 1 conține rezultatul calculat după aplicarea primelor kk operații. Fiecare rezultat se afișează modulo 109+710^9 + 7.

Restricții și precizări

  • C{1,2}C \in \{1, 2\}
  • 1N200 0001 \le N \le 200 \ 000
  • 0Q200 0000 \le Q \le 200 \ 000
  • 1si1091 \le s_i \le 10^9, pentru orice 1iN1 \le i \le N
  • 1posN1 \le pos \le N, pentru fiecare operație
  • 1val1091 \le val \le 10^9, pentru fiecare operație
  • Pentru C=2C = 2, cele N1N - 1 muchii formează un arbore (graf conex și fără cicluri)
  • Toate rezultatele se afișează modulo 109+710^9 + 7.
# Punctaj Restricții
1 3 C=1C = 1, Q=0Q = 0, N100N \le 100
2 8 C=1C = 1, Q=0Q = 0, N400N \le 400
3 13 C=1C = 1, Q=0Q = 0, N2 000N \le 2 \ 000
4 24 C=1C = 1, Q=0Q = 0, N200 000N \le 200 \ 000
5 19 C=1C = 1, N,Q100 000N, Q \le 100 \ 000
6 14 C=1C = 1, N,Q200 000N, Q \le 200 \ 000
7 4 C=2C = 2, Q=0Q = 0, N200 000N \le 200 \ 000
8 6 C=2C = 2, N,Q100 000N, Q \le 100 \ 000
9 9 C=2C = 2, N,Q200 000N, Q \le 200 \ 000

Exemplul 1

puterea-p.in

1
4
1 2 1 3
1
3 2

puterea-p.out

26
22

Explicație

Acest exemplu corespunde cerinței 11, cu N=4N = 4 și șirul inițial s=(1,2,1,3)s = (1, 2, 1, 3).

Subsecvențele de lungime 11 au puterea totală 00 (o singură valoare apare o dată, deci freq(1freq)=10=0freq \cdot (1 - freq) = 1 \cdot 0 = 0).

Pentru celelalte subsecvențe:

  • (s1,s2)=(1,2)(s_1, s_2) = (1, 2), (s2,s3)=(2,1)(s_2, s_3) = (2, 1) și (s3,s4)=(1,3)(s_3, s_4) = (1, 3) au fiecare două valori distincte, deci putere totală 11+11=21 \cdot 1 + 1 \cdot 1 = 2.
  • (s1,s2,s3)=(1,2,1)(s_1, s_2, s_3) = (1, 2, 1): freq1=2freq_1 = 2, freq2=1freq_2 = 1, L=3L = 3, putere 21+12=42 \cdot 1 + 1 \cdot 2 = 4.
  • (s2,s3,s4)=(2,1,3)(s_2, s_3, s_4) = (2, 1, 3): toate distincte, L=3L = 3, putere 3(12)=63 \cdot (1 \cdot 2) = 6.
  • (s1,s2,s3,s4)=(1,2,1,3)(s_1, s_2, s_3, s_4) = (1, 2, 1, 3): freq1=2freq_1 = 2, freq2=1freq_2 = 1, freq3=1freq_3 = 1, L=4L = 4, putere 22+13+13=102 \cdot 2 + 1 \cdot 3 + 1 \cdot 3 = 10.

Suma este 2+2+2+4+6+10=262 + 2 + 2 + 4 + 6 + 10 = 26, valoarea afișată pe prima linie.

După operația (pos,val)=(3,2)(pos, val) = (3, 2), șirul devine s=(1,2,2,3)s = (1, 2, 2, 3). Recalculând (de exemplu, subsecvența (2,2)(2, 2) are acum puterea 00), suma puterilor totale devine 2222.

Exemplul 2

puterea-p.in

2
4
1 2 2 3
1 2
1 3
1 4
1
1 2

puterea-p.out

22
10

Explicație

Acest exemplu corespunde cerinței 22, cu N=4N = 4. Nodul 11 este conectat cu nodurile 22, 33 și 44 (asemenea figurii de mai jos), iar valorile inițiale sunt s1=1s_1 = 1, s2=2s_2 = 2, s3=2s_3 = 2, s4=3s_4 = 3.

Lanțurile formate dintr-un singur nod au puterea totală 00. Pentru perechile de noduri distincte:

  • {1,2}\{1, 2\}: valorile (1,2)(1, 2), putere 22.
  • {1,3}\{1, 3\}: valorile (1,2)(1, 2), putere 22.
  • {1,4}\{1, 4\}: valorile (1,3)(1, 3), putere 22.
  • {2,3}\{2, 3\}: drumul 221133, valorile (2,1,2)(2, 1, 2), deci freq2=2freq_2 = 2, freq1=1freq_1 = 1, L=3L = 3, putere 21+12=42 \cdot 1 + 1 \cdot 2 = 4.
  • {2,4}\{2, 4\}: drumul 221144, valorile (2,1,3)(2, 1, 3), putere 66.
  • {3,4}\{3, 4\}: drumul 331144, valorile (2,1,3)(2, 1, 3), putere 66.

Suma este 2+2+2+4+6+6=222 + 2 + 2 + 4 + 6 + 6 = 22, valoarea afișată pe prima linie.

După operația (pos,val)=(1,2)(pos, val) = (1, 2), valorile devin s=(2,2,2,3)s = (2, 2, 2, 3). Acum lanțurile {1,2}\{1, 2\}, {1,3}\{1, 3\} și {2,3}\{2, 3\} au puterea 00, lanțul {1,4}\{1, 4\} are puterea 22, iar lanțurile {2,4}\{2, 4\} și {3,4}\{3, 4\} au fiecare puterea 44. Suma devine 0+0+2+0+4+4=100 + 0 + 2 + 0 + 4 + 4 = 10.

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