Mai intai trebuie sa te autentifici.
Diferente pentru jc2023/solutii/permdist intre reviziile #10 si #9
Nu exista diferente intre titluri.
Diferente intre continut:
h2. Subtaskul 6, $100$ puncte
Săgrupăm valorile dupăce cicluri aparţînîn cele douăpermutări,şi săluăm o mulţime de astfel de numere, $S$ (care aparţîn aceluiaşi cicluîn ambele permutări). Fie $Cycle(T)$ unşir astfelîncât scrierea fiecărui ciclu din $T$ căelemente consecutive din acesta este o subsecventădin $Cycle(A)$. Exemplu: pentru $T = [5, 3, 2, 1, 4], Cycle(T)$ poate fi egalşi cu $[5, 4, 1, 3, 2]$,şi cu $[2, 3, 1, 5, 4]$. Nu conteazăvaloarea efectivăatâta timp cât se păstreazăproprietatea menţinutăanterior. Fie o valoare $r$ pentru care vrem săcalculăm răspunsul. Pentru fiecare valoare $a$, din $S$, săconsiderăm poziţia acesteia din $Cycle(B)$, că$I{~a~}$. Săpunem un markerîntr-un vector paralel cu $Cycle(B)$ pe poziţia $I{~a~} - d{~A~}(r, a)$ pentru fiecare $a$. Este clar cănumărul de markere de pe poziţia $I{~r~}$ include un mare număr de elemente din soluţia noastră. Singurăproblema vine de la valorile $u$ care au $I{~u~} < I{~r~}, $I{~u~} + D_B{~u~} - d{~A~}(r, u} = I{~r~}$ ^({$3$})^ (În termeni mai familiari, $u$ ar ajunge la $r$ "prin spatele ciclului din B"). Pentru a repara această, sugerăm lucrarea pe un vector similar lui $Cycle(B)$, dar care ar repara aceastăproblema. Introducem noţiuneaşirului $Cycle^2^(B)$, a cărui definiţie este similară, doar căscrierea fiecărui ciclu (căelemente consecutive din parcugerea acestora) este scrisăde douăori (în aceeaşi ordine de fiecare dată). Exemplu: pentru $T = [5, 3, 2, 1, 4], Cycle(T)$ poate fi egalşi cu $[5, 4, 1, 5, 4, 1, 3, 2, 3, 2]$,şi cu $[2, 3, 2, 3, 1, 5, 4, 1, 5, 4]$. Din nou, nu conteazăcu care varianta lucrăm atâta timp cât se păstreazăaceste propietăţi. Continuăm cu noţiunea markerelor, doar căpentru fiecare valoare $a$ din $S$, punem un marker cu $d{~A~}(r, a)$ poziţiiînapoi relativ de fiecare apariţie a acesteia din $Cycle^2^(B)$. Acum, este clar căexistenţa problematica a unui $u$ menţionat anterior este reparatăde apariţia acestuia la cele $D_B{~u~}$ unităţi maiîn faţăînşir (într-atât că^({$3$})^ se respectă). Acum, structura dată(a markerelor) ne poate răspunde corect la queryuri. Singurăproblema este căaceastăeste (în momentul de faţă) descrisăcât săpoatăsărăspundăcorect^({$4$})^ doar la queryuri privind pe $r$. Trebuie săreparăm asta. Săpresupunem căavem laîndemânăun $r'$ care respectăcăpentru orice alt $a$în $S$, $a != r$, avem că$d{~A~}(r,a) ≥ d{~A~}(r, r')$. Atunci, poziţiile markerelor se vor schimbă(dacăam vrem săadaptăm structura noastrăde date la a răspunde la queryuri pentru $r'$) asemenea:
Sa grupam valorile dupa ce cicluri apartin in cele doua permutari, si sa luam o multime de astfel de numere, $S$ (care apartin aceluiasi ciclu in ambele permutari). Fie $Cycle(T)$ un sir astfel incat scrierea fiecarui ciclu din $T$ ca elemente consecutive din acesta este o subsecventa din $Cycle(A)$. Exemplu: pentru $T = [5, 3, 2, 1, 4], Cycle(T)$ poate fi egal si cu $[5, 4, 1, 3, 2]$, si cu $[2, 3, 1, 5, 4]$. Nu conteaza valoarea efectiva atata timp cat se pastreaza proprietatea mentinuta anterior. Fie o valoare $r$ pentru care vrem sa calculam raspunsul. Pentru fiecare valoare $a$, din $S$, sa consideram pozitia acesteia din $Cycle(B)$, ca $I{~a~}$. Sa punem un marker intr-un vector paralel cu $Cycle(B)$ pe pozitia $I{~a~} - d{~A~}(r, a)$ pentru fiecare $a$. Este clar ca numarul de markere de pe pozitia $I{~r~}$ include un mare numar de elemente din solutia noastra. Singura problema vine de la valorile $u$ care au $I{~u~} < I{~r~}, $I{~u~} + D_B{~u~} - d{~A~}(r, u} = I{~r~}$ ^({$3$})^ (In termeni mai familiari, $u$ ar ajunge la $r$ "prin spatele ciclului din B"). Pentru a repara aceasta, sugeram lucrarea pe un vector similar lui $Cycle(B)$, dar care ar repara aceasta problema. Introducem notiunea sirului $Cycle^2^(B)$, a carui definitie este similara, doar ca scrierea fiecarui ciclu (ca elemente consecutive din parcugerea acestora) este scrisa de doua ori (in aceeasi ordine de fiecare data). Exemplu: pentru $T = [5, 3, 2, 1, 4], Cycle(T)$ poate fi egal si cu $[5, 4, 1, 5, 4, 1, 3, 2, 3, 2]$, si cu $[2, 3, 2, 3, 1, 5, 4, 1, 5, 4]$. Din nou, nu conteaza cu care varianta lucram atata timp cat se pastreaza aceste propietati. Continuam cu notiunea markerelor, doar ca pentru fiecare valoare $a$ din $S$, punem un marker cu $d{~A~}(r, a)$ pozitii inapoi relativ de fiecare aparitie a acesteia din $Cycle^2^(B)$. Acum, este clar ca existenta problematica a unui $u$ mentionat anterior este reparata de aparitia acestuia la cele $D_B{~u~}$ unitati mai in fata in sir (intr-atat ca ^({$3$})^ se respecta). Acum, structura data (a markerelor) ne poate raspunde corect la queryuri. Singura problema este ca aceasta este (in momentul de fata) descrisa cat sa poata sa raspunda corect^({$4$})^ doar la queryuri privind pe $r$. Trebuie sa reparam asta. Sa presupunem ca avem la indemana un $r'$ care respecta ca pentru orice alt $a$ in $S$, $a != r$, avem ca $d{~A~}(r,a) ≥ d{~A~}(r, r')$. Atunci, pozitiile markerelor se vor schimba (daca am vrem sa adaptam structura noastra de date la a raspunde la queryuri pentru $r'$) asemenea:
# Markerele care proveneau de la valoarea $r$ se duc cu $d{~A~}(r', r)$ poziţiiîn urmă# Toate celelalte markere se duc cu $d{~A~}(r, r')$ poziţiiîn faţă.
# Markerele care proveneau de la valoarea $r$ se duc cu $d{~A~}(r', r)$ pozitii in urma # Toate celelalte markere se duc cu $d{~A~}(r, r')$ pozitii in fata.
Pentru a putea acomoda aceste operaţii, putem folosi trucul detaliat mai atent "aici":https://codeforces.com/blog/entry/58316 (Un vector de frecvenţa pe care menţinem o variabilăglobalăde lazy care indicăcum trebuie sămodificăm celelalte valori cu respect faţăde operaţiile de tipul 2)
Pentru a putea acomoda aceste operatii, putem folosi trucul detaliat mai atent "aici":https://codeforces.com/blog/entry/58316 (Un vector de frecventa pe care mentinem o variabila globala de lazy care indica cum trebuie sa modificam celelalte valori cu respect fata de operatiile de tipul 2)
^({$4$})^: Asta este fals,într-atât cădacă(pentru $a$ arbitrar din $S$) $D_A{~a~} > D_B{~a~}$, atunci nu este suficient concatenarea de douăori a ciclurilor când vrem săreparăm "ciclarea pe la spate",într-atât căacest truc a mers doar pentru căam presupus căpentru orice $u$, $I{~u~} + D_B{~u~} ≥ I{~r~}$ (vezi ^({$3$})^),într-atât căpentru a considerăşi cazul "ciclarii pe la spate" este necesarăo singurăparcurgere a acestui ciclu. Asta nu este adevărat dacăputem avea valori ale $d{~A~}(r, u) mai mari decât D_B{~u~}$. De aceea, când calculăm răspunsul pentru o mulţime, vom pune markereîntr-un vector paralel cu $Cycle^2^(T)$, unde $T$ este $A$ dacă$D_A{~a~} > D_B{~a~}$ (pentru un $a$ din $S$),şi $B$ dacănu (cum a fost descris de-a lungul acestui editorial).
^({$4$})^: Asta este fals, intr-atat ca daca (pentru $a$ arbitrar din $S$) $D_A{~a~} > D_B{~a~}$, atunci nu este suficient concatenarea de doua ori a ciclurilor cand vrem sa reparam "ciclarea pe la spate", intr-atat ca acest truc a mers doar pentru ca am presupus ca pentru orice $u$, $I{~u~} + D_B{~u~} ≥ I{~r~}$ (vezi ^({$3$})^), intr-atat ca pentru a considera si cazul "ciclarii pe la spate" este necesara o singura parcurgere a acestui ciclu. Asta nu este adevarat daca putem avea valori ale $d{~A~}(r, u) mai mari decat D_B{~u~}$. De aceea, cand calculam raspunsul pentru o multime, vom pune markere intr-un vector paralel cu $Cycle^2^(T)$, unde $T$ este $A$ daca $D_A{~a~} > D_B{~a~}$ (pentru un $a$ din $S$), si $B$ daca nu (cum a fost descris de-a lungul acestui editorial).