Počet bodov:
Program:  20b

Nina (nie tá Nina, iná Nina) sa veľmi zaujíma o programovanie. Zistila, že v jednej dobrej škole existuje jeden dobrý programátorský krúžok, ktorý vedie jeden preslávený Samko Gurský, a.k.a. Hodobox. Celý týždeň chúlostivo túžila a nevedela sa dočkať, kedy už konečne nadíde pondelok a bude môcť prísť.

Nadišiel pondelok a Nine sa začal vytúžený deň. Skončila školu, kúpila si kebab, nastúpila do autobusu, vystúpila, prešla cez prechod, hore po schodoch a sadla si do lavice spolu s ostatnými. Nastražila uši a počúvala. Samko rozprával.

“Intervalové stromy sú taká pekná dátová štruktúra, s ktorou vieme rýchlo vykonávať všeliaké operácie na súvislých úsekoch postupnosti prvkov…”

Samko vysvetlil, ako robiť súčtový intervaláč a okrajom spomenul, že intervaláč sa dá spraviť pre takmer hocijakú matematickú operáciu. Vtedy Nine vhupla do hlavy veľká myšlienka: Čo tak spraviť intervaláč, ktorý bude robiť všetko? Sčítavať, odčítavať, násobiť, deliť, zisťovať súčet, minimum, maximum, priemer, všetko!

S týmto magnificentným nápadom sa zdôverila Hodoboxovi, ktorý ju však vysmial a odporučil, aby začala s nejakým menším nápadom. Nina si jeho radu zobrala k srdcu a zredukovala svoj intervaláč na sčítavanie, delenie, zisťovanie súčtu a minima. S týmto novým nápadom už nešla za Hodoboxom. Bála sa, že ju opäť vysmeje. Šla radšej za Mišom. Ten bol z jej nápadu nadšený a rozhodol sa, že ho použije ako úlohu do KSP.

Úloha

Máme pole \(n\) čísel (\(n \leq 10^5\)) v rozsahu od \(-10^9\) po \(10^9\) vrátane. Prichádza nám \(q\) požiadaviek (\(q \leq 10^5\)), pre všetky požiadavky platí \(0 \leq l \leq r \leq n - 1\) a každá má jeden z nasledovných tvarov:

  • 1 l r c : Ku každému číslu v poli s indexom v intervale \(l \dots r\) (vrátane) pripočítame číslo \(c\) (\(-10^4 \leq c \leq 10^4\)).
  • 2 l r d : Každé číslo v poli s indexom v intervale \(l \dots r\) (vrátane) celočíselne vydeľ číslom \(d\) (\(2 \leq d \leq 10^9\)), so zaokrúhlením smerom nadol.
  • 3 l r : Nájdi a vypíš najmenšie z čísel v poli s indexami v intervale \(l \dots r\) (vrátane).
  • 4 l r : Nájdi a vypíš súčet všetkých čísel v poli s indexami v intervale \(l \dots r\) (vrátane).

Formát vstupu

Prvý riadok obsahuje dve čísla: \(n\) a \(q\) oddelené medzerou.

Druhý riadok obsahuje \(n\) čísel oddelených medzerou: počiatočné hodnoty čísel v poli.

Nasledujúcich \(q\) riadkov obsahuje popisy jednotlivých požiadaviek vo formáte, ako je popísané vyššie.

Sú štyri testovacie sady, v prvej zo sád navyše platí \(n \leq 10\,000\) a \(q \leq 5\,000\).

Formát výstupu

Pre každú požiadavku typu 3 a 4 treba vypísať jeden riadok obsahujúci jedno číslo: odpoveď na danú požiadavku.

Príklad

Input:

10 10
-5 -4 -3 -2 -1 0 1 2 3 4
1 0 4 1
1 5 9 1
2 0 9 3
3 0 9
4 0 9
3 0 1
4 2 3
3 4 5
4 6 7
3 8 9

Output:

-2
-2
-2
-2
0
1
1

Odovzdávanie

Na odovzdávanie sa musíš prihlásiť

Otázky a diskusia

Po skončení kola budete mať príležitosť na diskutovanie o riešeniach v diskusii pod vzorovým riešením.