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 SkupoviSqrt Dekompozicija
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 Bitmaskama
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

Drvoseča II

MediumProblem #58
VremeMemorijaUlazIzlaz
1 s64 MBstdinstdout

Isti zadatak kao Drvoseča, ali je sabiranje drvo po drvo sada presporo. Šuma se između porudžbina ne menja.

Drvoseča Milan je otvorio radnju. Njegova testera stoji na stalku koji može da se podesi na bilo koju celobrojnu visinu u metrima, i tako seče svako drvo u šumi tačno na toj visini. Pada samo deo drveta iznad sečiva - drvo koje nije više od sečiva ostaje netaknuto.

Sada mu dolazi q mušterija, jedna za drugom, i svaka naručuje neku količinu drveta. Milan i dalje brine o šumi, pa za svaku porudžbinu želi da podesi testeru što više može, a da i dalje dobije bar naručenu količinu.

Porudžbine su nezavisne - Milan svaku od njih planira za istu netaknutu šumu, pa se visine drveća nikada ne menjaju.

Ulaz

U prvoj liniji ulaza je jedan ceo broj t - broj test primera.
U prvoj liniji svakog test primera su dva cela broja n i q - broj drveća u šumi i broj porudžbina.
U drugoj liniji je n celih brojeva h1​,h2​,…,hn​ - visine drveća.
U trećoj liniji je q celih brojeva x1​,x2​,…,xq​ - naručene količine drveta.

Izlaz

Za svaku porudžbinu ispiši u posebnoj liniji najveću visinu na koju testera može da se podesi.

Primer

Input
2
5 3
24 21 19 14 22
14 40 1
1 2
7
7 3
Output
18
12
23
0
4

Prva šuma ukupno ima 100 metara drveta. Za porudžbinu od 14 metara testera ide na 18; za 40 metara mora da se spusti na 12, gde svih pet stabala zajedno daje tačno 40; a za jedan metar je dovoljno skinuti vrh najvišeg stabla, sa sečivom na 23.

Ograničenja

1≤t≤5
1≤n≤105
1≤q≤105
1≤hi​≤109
1≤xj​≤h1​+h2​+⋯+hn​ - u šumi uvek ima dovoljno drveta


Zadatak je, uz dozvolu, preuzet iz zadatka Drva, čiji su autori Društvo matematičara Srbije i Fondacija Petlja.

Pošalji svoje rešenje

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

Prijavi se