LearnToCP
Prijavi se
Navigacija
PočetnaRoad-mapaProblemiO Nama
Teorija
Takmičarsko Znanje
Izbor Radnog Okruženja (IDE)Interaktivni ZadaciOutput-only Zadaci
Osnove
Tvoj Prvi ProgramTipovi podataka, Unos i IzlazC++ sintaksaModuloFunkcijeVektoriMatriceVremenska Složenost Algoritma
Sortiranje
SortiranjeSortiranje PrebrojavanjemRadix Sort
Tehnike Optimizacije
Dva PokazivačaZbir brojeva od 1 do nZbir PrefiksaBinarna PretragaPohlepni AlgoritmiFunkcije Binarne PretrageBinarna Pretraga po RešenjuPodeli, pa Vladaj
Binarni Brojevi
Binarni BrojeviBrojevi u koduOperacije nad BitovimaBitmaske
Matematika
Binarno StepenovanjeProsti BrojeviRastavljanje na proste činioceNZD i NZSEratostenovo SitoModifikovano Sito
Strukture Podataka
Niske (Stringovi)StekRedMapeSkupovi (Set)Red sa PrioritetomKorišćenje Proizvoljnih KriterijumaSegmentna StablaFenvikova StablaSparse TabeleDisjunktni Skupovi
Kombinatorika
Pravilo SabiranjaPravilo MnoženjaKombinatorni ObjektiPrincip Uključenja Isključenja
Geometrija
Osnove GeometrijeVektoriVektorski i Skalarni ProizvodLinijePoligoniUgloviTačka u PoligonuRastojanja i Tačke PresekaKonveksni OmotačKrugovi
Rekurzija
PokazivačiRekurzijaGenerisanje Kombinatornih Objekata
Dinamičko Programiranje
O DP-uDP problemiDP nad StablimaDP nad BitmaskamaDP nad brojevima
Teorija Grafova
GrafoviDFS i BFSNajkraći PuteviStablaTopološko SortiranjeDajkstrin AlgoritamMinimalna Razapinjuća StablaAlgoritmi Najkraćih Puteva
Napredna Teorija Grafova
Dvostruka PovezanostJako Povezane KomponenteBipartitni GrafMaksimalni Protok u GrafuFord-Fulkersonov AlgoritamDualnost Protoka i Minimalnog PresekaTeško-Laka DekompozicijaCentroidna Dekompozicija
Napredne Strukture Podataka
2D i 3D Segmentna StablaLenjo PropagiranjeImplicitna Segmentna StablaPerzistentna Segmentna StablaNajbliži Zajednički PredakTrieBalansirana Binarna Stabla PretrageMoov Algoritam

Dokle AND izdrži

MediumProblem #76
VremeMemorijaUlazIzlaz
1 s64 MBstdinstdout

Kada se segment produži udesno, bitovi mogu samo da se gase.

Za niz a i dve pozicije l≤r označimo

f(l,r)=al​&al+1​&⋯&ar​

gde je & bitwise AND.

Dat ti je niz, a zatim i q pitanja. Svako pitanje zadaje početnu poziciju l i prag k, pa traži najveće r za koje važi l≤r≤n i f(l,r)≥k - dakle, dokle segment može da se rastegne udesno pre nego što mu AND padne ispod k.

Ulaz

U prvoj liniji ulaza je jedan ceo broj t - broj test primera.
U prvoj liniji svakog test primera je jedan ceo broj n - dužina niza.
U drugoj liniji je n celih brojeva a1​,a2​,…,an​.
U trećoj liniji je jedan ceo broj q - broj pitanja.
U svakoj od sledećih q linija su dva cela broja l i k - početna pozicija i prag.

Pozicije se broje od 1.

Izlaz

Za svaki test primer ispiši u jednoj liniji odgovore na njegovih q pitanja, redom i razdvojene razmacima. Ako je već i f(l,l) ispod k, za to pitanje ispiši −1.

Primer

Input
3
5
15 14 17 42 34
3
1 7
2 15
4 5
5
7 5 3 1 7
4
1 7
5 7
2 3
2 2
7
19 20 15 12 21 7 11
4
1 15
4 4
7 12
5 7
Output
2 -1 5
1 5 2 2
2 6 -1 5

Pogledajmo prvo pitanje prvog test primera. Kada krenemo od l=1, dobijamo f(1,1)=15, f(1,2)=14, a zatim f(1,3)=f(1,4)=f(1,5)=0, pa je r=2 najdalja pozicija na kojoj se ostaje na 7 ili iznad. Drugo pitanje kreće od l=2, gde je već a2​=14 manje od 15, pa je odgovor −1.

Ograničenja

1≤t≤104
1≤n≤2⋅105
1≤q≤105
1≤ai​≤109
1≤l≤n i 1≤k≤109
Zbir svih n po test primerima najviše je 2⋅105, a isto važi i za zbir svih q


Zadatak je nastao po uzoru na Iva & Pav, zadatak 1878E sa Codeforces Round 900, autora Mike Mirzayanov i tima Codeforces. Postavka je naša.

Pošalji svoje rešenje

Prijavi se da pošalješ rešenje i pratiš svoj napredak.

Prijavi se