Try this problem.
It's based on segment trees. Not difficult but may require optimization.
Now a bit difficult one.
You may stop reading below do it yourself.
Hint.
here different nodes are updated with different weights in a range.
Fortunately when querying the range, the sum is asked. And we have a trick here.
the idea is simple.
Mathematically sum of two parabolas is also a parabola.
(a1*x^2 + b1*x + c1) + (a2*x^2 + b2*x + c2) = (a1+a2) * x^2 + (b1+b2) * x + (c1+c2)
which is also a parabola.
let Q(x) = a * x^2 + b * x + c
suppose a parabola falls in range (x1,x2)
the sum is
Q(x1) + Q(x1+1) + Q(x1+2) ... Q(x2)
= a * (x1^2 + (x1+1) ^2 + (x1+2) ^2 .... x2^2 )
+ b * ( x1 + x1+1 + x1+2 ... x2 ) + c * (x2-x1+1)
Store 4 things in each node.
3 coefficients of the parabolas and 1 sum of the blocks in the range the node covers.
A difficult one
Enjoy!!
This comment has been removed by the author.
ReplyDelete