- Time limit: 1.00 s
- Memory limit: 128 MB
Tehtäväsi on toteuttaa tietorakenne, joka pitää yllä taulukkoa lukuja ja tarjoaa seuraavat operaatiot:
- kasvata jokaista välillä olevaa lukua x:llä
- muuta jokainen välillä oleva luku x:ksi
- laske välin lukujen summa
Taulukossa on n lukua, ja ne on indeksoitu 1,2,\ldots,n.
Syöte
Syötteen ensimmäisellä rivillä on kokonaisluku n, taulukon koko.
Seuraavalla rivillä on n lukua t_1,t_2,\ldots,t_n, jotka kuvaavat taulukon alkusisällön.
Sitten syötteessä on luku q, kyselyjen määrä.
Lopuksi syötteessä on q riviä, joista jokainen kuvaa yhden kyselyn.
Jos kysely on tyyppiä 1, rivi on muotoa "1 a b x". Tämä tarkoittaa, että välin [a,b] lukuja tulee kasvattaa x:llä.
Jos kysely on tyyppiä 2, rivi on muotoa "2 a b x". Tämä tarkoittaa, että välin [a,b] luvuiksi tulee muuttaa x.
Jos kysely on tyyppiä 3, rivi on muotoa "3 a b". Tämä tarkoittaa, että tulee laskea välin [a,b] lukujen summa.
Tuloste
Ohjelmasi tulee tulostaa jokaisesta tyypin 3 kyselystä lukujen summa omalle rivilleen.
Rajat
- 1 \le n \le 10^5
- -10^6 \le t_i \le 10^6
- 1 \le q \le 10^5
- 1 \le a \le b \le n
- -10^6 \le x \le 10^6
Esimerkki
Syöte:
5 2 3 1 1 5 5 3 3 5 1 2 4 2 3 3 5 2 2 4 5 3 3 5
Tuloste:
7 11 15