Links
[Contest](https://www.codechef.com/INSO2018/problems/CNTNODE)Author: Adarsh Kumar
Tester: Samarth Joshi
Editorialist: Adarsh Kumar
DIFFICULTY:
MediumPREREQUISITES:
Segment tree, Dynamic ProgrammingEXPLANATION:
The maximum value of k can be 2logn. This can be proved intuitively.For every node representing the range (l,r) we will store three arrays:
pre[i] - number of ranges (l,p) for which cnt = i;
suf[i] - number of ranges (p,r) for which cnt = i;
ans[i] - number of ranges (p,q) for which cnt = i;
where <i>(1 <= i <= k), (l <= p,q <= r)</i>
Then a post order traversal is done to calculate the above values for every node. For merging the child nodes of a parent node:
pre[i][node] = pre[i]
suf[i][node] = suf[i][right]
ans[i+j][node] = sum(suf[i]*pre[j][right])
The answer to the problem is ans[i][1]
Author’s Solution can be found here
Tester’s Solution can be found here