Ana are o afacere cu un şir format din litere mici, memorate pe poziţiile . Şirul este considerat circular (adică după litera de pe poziţia se consideră că urmează litera de pe poziţia ).
Asupra acestui şir Ana trebuie să efectueze eficient următoarele operaţii:
- : schimbă litera de pe poziţia poz din şir în litera
- : consideră subsecvenţa din şir care începe pe poziţia şi subsecvenţa care începe pe poziţia , ambele secvenţe având lungimea , şi determină distanţa Hamming dintre cele două subsecvenţe.
Distanţa Hamming dintre două subsecvenţe şi de lungime este definită ca numărul de poziţii pentru care , .
Pentru că volumul datelor de intrare este mare, vom genera operaţiile asupra şirului pe baza unor valori date, după cum urmează:
- numărul total de operaţii;
- frecvenţa operaţiilor Update (după fiecare operaţii Query se execută un Update);
- valori (iniţial date) în funcţie de care generăm operaţiile.
Vectorii cu elemente naturale şi respectiv cu elemente naturale conţin valori utilizate de asemenea pentru generarea operaţiilor (vectorii şi fiind indexaţi de la ).
Pseudocodul care descrie modul de generare a operaţiilor Update/Query:
for (i = 1; i <= M; i++)
{if (i % Q == 0) // generez o operatie Update
{poz=A1%N; c='a' + A2 % 26;
S[poz] = c; }
else //generez o operatie Query
{ poz1 = A0%N; poz2=A1%N; len=L+A2%(N-L+1); }
//recalculez A0 A1 A2
VAL = ((long long)A2*X[i%LX]+Y[i%LY])%R; A0 = A1; A1 = A2; A2 = VAL;
}
Cerinţă
Scrieţi un program care să efectueze operaţiile generate şi să determine suma răspunsurilor la operaţiile Query.
Date de intrare
Fişierul de intrare afaceri.in
va conţine pe prima linie numerele naturale şi . A doua linie va conţine numărul natural , apoi vor urma numere naturale reprezentând valorile vectorului . A treia linie va conţine numărul natural , apoi vor urma numere naturale reprezentând valorile vectorului . A patra linie va conţine litere mici reprezentând şirul dat. Valorile numerice aflate pe aceeaşi linie sunt separate prin spaţii.
Date de ieșire
Fişierul de ieşire afaceri.out
va conţine o singură linie pe care va fi scris un singur număr natural reprezentând suma răspunsurilor la query-urile date.
Restricții și precizări
- ;
- ;
- ;
- ;
Exemplu
afaceri.in
7 15 4 3 5 6 7 8
3 5 4 1
3 7 2 6
lrqagor
afaceri.out
65