Editorial for Xort
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Napravimo segmentno stablo nad intervalom . Za svaki segment
zapamtimo koliko brojeva iz početnog niza
su između
i
(odnosno broj indeksa
za koje važi
). Nazovimo to veličinom podstabala. Kako je operacija xor asocijativna pamtićemo xor svih
za xort operacije do sada u promenljivoj
. Posle prve xort operacije get upite rešavamo pomoću segmentnog stabla (pre prve xort operacije samo ispisujemo
). Započinjemo rekurziju na korenu stabla i pamtimo pomoćnu promenljivu
koja je na početku jednaka
. Ako
ima cifru
u binarnom sistemu na mestu
-a (na početku gledamo devetnaesto mesto) to znači da su u desnom podstablu manji brojevi nego u levom. U suprotnom su manji brojevi u levom podstablu. Zapamtimo u kom podstablu su manji brojevi. Ako je veličina tog podstabla veća ili jednaka
rešenje nastavljamo da tražimo upravo u tom podstablu i smanjujemo
za
. U suprotnom na rešenje dodajemo
, smanjujemo
za veličinu podstabla sa manjim brojevima, smanjujemo
za
i nastavljamo pretragu u drugom podstablu. Kada stignemo do lista prekidamo proces i ispisujemo rešenje.
Sa označimo maksimalnu moguću vrednost u nizu
u nekom trenutku.
Vremenska složenost je
.
Comments