„Este nevoie de un rând întreg pentru a construi liniștea și de o singură actualizare pentru a o distruge.”
Gigel, un manager de top, este responsabil cu formarea echipelor pentru ONI (Olimpiada Națională de Improvizații).
La concurs participă elevi, așezați în rând și indexați de la la . Pentru a evalua dinamica echipelor, Gigel a creat un „profil de personalitate” pentru fiecare elev, reprezentat printr-un număr natural stocat în vectorul .
Secretul acestui profil constă în faptul că fiecare bit din reprezentarea binară a lui semnifică o anumită preferință sau trăsătură a elevului (de exemplu: dacă preferă indexarea vectorilor de la în loc de , dacă pune acolada { pe același rând cu if-ul în loc de rândul următor, sau dacă abuzează de #pragma-uri etc.).
Concurenții pot participa fie singuri, fie în echipe de câte . Pentru a forma echipele, Gigel alege o subsecvență continuă din rândul de elevi. Apoi, el își imaginează această subsecvență ca pe o bandă flexibilă pe care o pliază exact la jumătate. Elevii care, în urma acestei plieri, ajung să stea față în față (să se suprapună), vor deveni coechipieri. În cazul în care subsecvența selectată are un număr impar de elevi, cel aflat exact pe cuta de pliere nu se va suprapune cu nimeni și va participa singur.
Gigel știe că, într-o echipă de , pentru fiecare trăsătură la care cei doi membri au opinii diferite (unul are bitul , iar celălalt ), va apărea o discuție în contradictoriu. Astfel, el deduce că tensiunea unei echipe este exact rezultatul operației sau exclusiv pe biți () dintre profilurile celor doi coechipieri. Un elev care participă singur nu are cu cine să se contrazică, deci tensiunea echipei sale este implicit (echivalentul matematic al operației ).
Definim echilibrul unei subsecvențe, notat cu , ca fiind suma tensiunilor tuturor echipelor formate în acea subsecvență.
Cerință
Luându-și foarte în serios rolul de selecționer, Gigel vă cere să rezolvați următoarele două sarcini:
- Să calculați suma echilibrelor pentru toate subsecvențele continue posibile din șirul inițial. Mai exact, se cere calcularea valorii:
- Să evaluați scenarii de mutări tactice, date sub forma : „Dacă l-aș scoate temporar din lot pe elevul de pe poziția și l-aș înlocui cu o rezervă având profilul de personalitate egal cu , care ar fi noua sumă totală a echilibrelor modulo ?”.
Notă: Nu vă faceți griji, aceste înlocuiri sunt doar simulări pe foaie. După fiecare interogare, elevul original își recapătă locul, iar șirul revine la starea inițială.
Date de intrare
Fișierul de intrare teams.in conține pe prima linie numerele naturale și , reprezentând numărul total de elevi și numărul de scenarii pe care trebuie să le rezolvăm. Pe cea de-a doua linie se găsesc numere naturale, separate prin câte un spațiu, reprezentând profilurile de personalitate ale elevilor (elementele vectorului ). Pe fiecare dintre următoarele linii este descris câte un scenariu, exact ca mai sus.
Date de ieșire
Fișierul de ieșire teams.out va conține pe prima linie un singur număr natural, reprezentând suma echilibrelor pentru toate subsecvențele continue posibile din rândul elevilor, calculată modulo . Fiecare dintre următoarele linii va conține răspunsul modulo la fiecare scenariu în parte, în ordinea în care acestea au fost citite.
Restricții și precizări
- Restricțiile asupra lui sunt valabile pentru orice .
- Notă: Operația sau-exclusiv (XOR) pe biți este reprezentată în C/C++ prin operatorul
^.
| # | Punctaj | Restricții |
|---|---|---|
| 1 | 9 | și |
| 2 | 10 | și |
| 3 | 18 | și |
| 4 | 6 | |
| 5 | 8 | și |
| 6 | 13 | Atât inițial, cât și după orice scenariu, există cel mult elemente nenule în șir. |
| 7 | 14 | pentru toate scenariile |
| 8 | 22 | Fără restricții suplimentare |
Exemplul 1
teams.in
4 0
1 2 1 3
teams.out
14
Explicație
În primul exemplu, dacă am alege întregul șir, atunci coechipieri ar fi elevii aflați pe pozițiile și . Așadar, echilibrul subsecvenței este . Pentru celelalte subsecvențe se procedează similar, echilibrele fiind, în ordinea lexicografică a capetelor: , , , , , , , , , . Observăm că suma lor este exact .
Exemplul 2
teams.in
10 7
45 12 107 88 3 56 120 77 21 99
3 64
1 8
10 127
5 0
7 56
1 45
8 33
teams.out
6623
6508
6580
6603
6584
6495
6623
6555