CSES - Treap VI
  • Time limit: 5.00 s
  • Memory limit: 256 MB

Tehtävänäsi on ylläpitää n luvun taulukkoa. Aluksi taulukko on täynnä nollia. Taulukkoon tehdään seuraavanlaisia kyselyjä:

  • S: laske taulukon yhtenäisen välin summa modulo 2^{64}
  • R: käännä taulukon yhtenäinen väli ympäri
  • A: lisää taulukon yhtenäisellä välillä kaikkiin lukuihin annettu arvo

Syöte

Syötteen ensimmäisellä rivillä on luvut n ja q, taulukon koko ja kyselyiden lukumäärä. Seuraavat q riviä sisältävät kyselyt. Jokaisella kyselyrivillä on ensin merkki, joka kertoo kyselyn tyypin: S, R tai A. Rivin loppu riippuu kyselytyypistä:

  • S: luvut a ja b, välin alku- ja loppukohdat (1\leq a\leq b\leq n)
  • R: luvut a ja b, välin alku- ja loppukohdat (1\leq a\leq b\leq n)
  • A: luvut a ja b ja d, välin alku- ja loppukohdat, sekä välin jokaiseen alkioon lisättävä luku, (1\leq a\leq b\leq n)

Tuloste

Tulosta jokaista S-kyselyä kohti välin summa modulo 2^{64} omalle rivilleen.

Rajat

  • 1\leq n\leq 5\cdot 10^5
  • 1\leq q\leq 5\cdot 10^5
  • 1\leq d\leq 10^{12}

Esimerkki

Syöte:

8 24
R 7 8
R 2 3
A 1 3 66
S 1 5
A 2 4 43
R 1 4
R 5 6
S 3 8
R 4 8
A 1 7 8
S 6 6
R 1 3
A 4 8 91
S 3 7
S 2 3
R 4 8
R 4 8
S 4 4
S 7 8
A 1 6 74
S 1 6
A 6 6 88
A 5 6 13
S 2 4

Tuloste:

198
175
8
447
168
99
256
1026
489