Problem Description:
We are given a M-series which is the following one :
1,2,4,8,16,32,64 …
Now you are given N numbers and Q queries of following part :
1 x y - You want to find the count of numbers between x and y which are present in M-series .
0 x y z - Change numbers from indices x and y to number z .
You have to answer the queries in the most optimal way .
Problem Type : Easy - Medium / Segment Tree + Bit Manipulation
Explanation :
A typical Segment Tree with lazy problem .
Get the input of N numbers and mark it as 1 if power of 2 otherwise 0 . Then at each node of the segment tree store the sum representing the total count of numbers with are a power of 2 uptill this point .Remember to use lazy propagation as the updates are range based instead of point based .Using this each query can be answered in log( n ) time by querying the segment tree constructed above .
Complexity : Q * log( N ) where Q are the number of queries and N is the number of array elements .
Solution : https://ideone.com/egvxEp
Related Problems:
Practice : https://www.codechef.com/problems/BYTES13
Contest : https://www.codechef.com/BYTE2016/problems/BYTES13