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