Mladi haker Žak je odlučio da po svaku cenu dođe do šifre naloga svoga profesora. Otkrio je da je ta šifra tačno jednaka odgovoru na upita nad profesorovim nizom. Profesorov niz
ima
elemenata, a upiti su tipa
. Odgovor na upit je vrednost bitovske konjunkcije elemenata niza između indeksa
i
(uključujući i njih). Pomozite Žaku da otkrije šifru.
Opis ulaza
U prvom redu nalaze se brojevi , dužina niza i
najveći broj upita nad nizom. U drugom redu nalazi se niz od
elemenata. U narednih
redova nalaze se upiti opisanog formata.
Opis izlaza
Za svaki od upita ispisati vrednost bitovske konjunkcije elemenata između indeksa
i
.
Primer
Ulaz
5 4
1 5 4 3 2
1 3
4 5
2 5
2 3
Izlaz
0
2
0
4
Objašnjenje primera
Odgovor na prvi upit je: .
Odgovor na drugi upit je:
.
Odgovor na treći upit je:
.
Odgovor na četvrti upit je:
.
Ograničenja
- 1≤Q,N≤2⋅105
- 0≤Ai≤106
Postoje tri podzadatka:
- Podzadatak 1 [15 poena]: N,Q≤103.
- Podzadatak 2 [33 poena]:
.
- Podzadatak 3 [52 poena]: Nema dodatnih ograničenja.
Napomena
Operator konjunkcije u Pascal-u je označen sa and
, dok u C++ ga zapisujemo pomoću simbola &
. Ova operacija x and y se za nenegativne cele brojeve x,y definiše na sledeći način. Prvo se brojevi zapišu u binarnom zapisu. Ukoliko jedan broj ima manje cifara od drugog, dopisuju mu se vodeće nule sve dok ne budu imali isti broj binarnih cifara. Tako se dobijaju dva niza binarnih cifara, označimo ih sa a1,…,ak i b1,…bk. Zatim se za svaku poziciju i∈{1,…,k} računa ci pomoću sledećih pravila:
- Za
važi
- Za
važi
- Za
važi
- Za
važi
Niz binarnih cifara (koji možda ima vodeće nule) je binarni zapis rezultata, odnosno broja
.
Bitovska konjunkcija između elemenata
definiše se kao
.
Comments