Editorial for Moćni Niza
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Primetimo, prvo, da je optimalno da moć našeg niza ima bit ukoliko je to moguće, zato što čak i kad bi moć imala sve ostale, manje bitove, oni bi se sumirali u
. Potom treba da proverimo da li moć može da ima i
i
bit. Ukoliko to nije moguće,
bit možemo da ignorišemo i nastavimo dalje, a ukoliko jeste, zahtevaćemo da u rešenju uvek postoje ta dva bita. Dakle, možemo da nastavimo sa ovom procedurom, pohlepnog dodavanja bitova. Neophodno je da proverimo da li možemo da nađemo podelu u
segmenata, tako da moć niza sadrži neki podskup bitova
, tj. da li možemo da podelimo niz u
segmenata, tako da svaki segment sadrži bitove iz skupa
. Neka su pozicije numerisane od
. Pronađimo za svaku poziciju
najmanje
, takvo da
(cikličnog) segmenta
sadrži sve bitove iz skupa
. Ovakvo
možemo pronaći binarnom pretragom. Neka je
. Želeli bi da pronađemo da li je moguće napraviti podelu u segmente, tako da svaki segment sadrži bitove iz skupa
i tako da jedan segment počinje na poziciji
. Tada će jedan segment početi na poziciji
, naredni na poziciji
itd. Ovo je moguće postići tehnikom binarnog stepenovanja (eng.
). Za svaku poziciju pronađemo vrednost
- najmanja vrednost tako da ciklični segment
možemo podeliti na bar
segmenata, tako da
svakog segmenta sadrži sve bitove iz skupa
. Tada:
Kada pronađemo ove vrednosti, neophodno je da pronađemo za svako najmanje
, tako da ciklični segment
možemo podeliti na
segmenata tako da
svakog segmenta sadrži sve bitove iz skupa
. To možemo pronaći na sličan način kao i vrednosti matrice
. Ukoliko postoji
, takvo da je
, tada je moguće napraviti podelu na
segmenata tako da
svakog segmenta sadrži sve bitove iz skupa
. Složenost opisanog algoritma je
. Zadatak je preuzet sa
, takmičenje
.
Comments
Miki samo nastavljaš da me oduševljavaš!