Supermerge super merge cum ar spune Tanaka, dar nu merge că nu are picioare. Recent, Andrei și Andrei au descoperit mulțimi , care pot conține doar numere naturale de la la . Inițial, toate mulțimile sunt vide. Asupra mulțimilor, au observat că se întâmplă următoarele operații:
flip poz val- dacă elementul există în șirul , atunci, îl scoatem din mulțime. În caz contrar, îl introducem.supermerge st1 dr1 st2 dr2- se aplică:
procedure Supermerge
for i ← st1 ... dr1 do
for j ← st2 ... dr2 do
S[i], S[j] ← S[i] ∪ S[j]
Cerință
Cum operațiile produc numai haos în capul celor doi Andrei, ei vor să știe câte elemente sunt în fiecare mulțime, după fiecare operație. Pentru a simplifica rezultatul, ei solicită doar calcularea sumei următoare: , unde .
Detalii de implementare
Va trebui să implementezi mai multe funcții. Prima dintre ele este:
void init(int N, int VMAX)
care primește ca parametri:
- , numărul total de mulțimi
- , valoarea maximă pe care o poate lua elementul unei mulțimi
std::uint64_t flip(int poz, int val)
care:
- primește ca parametri indicele șirului și valoarea
- returnează suma care descrie mulțimile
std::uint64_t supermerge(int st1, int dr1, int st2, int dr2)
care:
- primește ca parametri intervalele între care are loc operația supermerge
- returnează suma care descrie mulțimile
Funcția init va fi apelată o singură data, iar funcțiile flip și supermerge vor fi apelate în total de maxim ori.
Restricții și precizări
- Pentru orice operație de tip
flip, se garantează că și - Pentru orice operație de tip
supermerge, se garantează că și - Prin
S[i], S[j] ← S[i] ∪ S[j]am notat că ambele șiruri primesc rezultatul reuniunii celor două mulțimi simultan.
| # | Punctaj | Restricții |
|---|---|---|
| 1 | 4 | |
| 2 | 10 | |
| 3 | 11 | |
| 4 | 23 | Pentru orice operație de tip supermerge, se garantează că și |
| 5 | 7 | |
| 6 | 19 | |
| 7 | 17 | Pentru orice operație de tip supermerge, se garantează că și |
| 8 | 9 | Fără restricții suplimentare. |
Exemple
input
5 3 5
0 1 1
1 1 2 2 3
0 3 2
1 1 1 5 5
0 2 2
output
1
1000000015000000057
2000000029000000106
4173964637407773643
4173964638407773650
Explicație
Starea mulțimilor, după fiecare operație, este: