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 \leq Q, N \leq 2 \cdot 10^5\)
- \(0 \leq A_{i} \leq 10^6\)
Postoje tri podzadatka:
- Podzadatak 1 [15 poena]: \(N, Q \leq 10^3\).
- 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\ \text{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 \(a_1, \ldots, a_k\) i \(b_1, \ldots b_k\). Zatim se za svaku poziciju \(i \in \{1, \ldots, k \}\) računa \(c_i\) 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