eolymp
bolt
Try our new interface for solving problems
Problems

Sum of Squares with Segment Tree

Sum of Squares with Segment Tree

Segment trees are extremely useful. In particular "Lazy Propagation" (for example allows one to compute sums over a range in O(lg(n)) and update ranges in O(lg(n)) as well. In this problem you will compute the sum of squares over a range with range updates of two types:

  • increment in a range
  • set all numbers the same in a range.

Input

First line contains number of test cases. First line of each test contains two positive integers n (n105) and q (q105). The next line contains n integers, each no more than 1000 by absolute value. Each of the next q lines starts with a number, which indicates the type of operation:

2 st nd – return the sum of the squares of the numbers with indices in [st, nd] {i.e., from st to nd inclusive} (1stndn).

1 st nd x – add "x" to all numbers with indices in [st, nd] (1stndn, and -1000x1000).

0 st nd x – set all numbers with indices in [st, nd] to "x" (1stndn, and -1000x1000).

Output

For each test case output the “Case <caseno>:” in the first line and from the second line output the sum of squares for each operation of type 2. Intermediate overflow will not occur with proper use of 64-bit signed integer.

Time limit 1 second
Memory limit 122.17 MiB
Input example #1
2
4 5
1 2 3 4
2 1 4
0 3 4 1
2 1 4
1 3 4 1
2 1 4
1 1
1
2 1 1
Output example #1
Case 1:
30
7
13
Case 2:
1