I have a splay tree for which I have implemented range_sum(left,right) which adds all the elements in the tree in range from left to right and it works in logarithmic time, is there anyway I can make a function range_up(left,right ,delta) which adds delta to every element in the range from left to right and works in logarithmic time?
How can I design this function to work in logarithmic time?
53 views Asked by aelc At
1
There are 1 answers
Related Questions in DATA-STRUCTURES
- Why is the runtime for this O(n)?
- Purpose of last 2 while loops in the merge algorithm of merge sort sorting technique
- What is the problem in my "sumAtBis" code?
- Asking code suggestions about data structure and algorithm
- What would be the most efficient way to store multiple sets of fixed arrays (std::vector)?
- About Suffix Trees features
- Getting wrong answer in Binary Search solution
- Are there techniques to mathematically compute the amount of searching in greedy graph searching?
- AVL tree Nth largest operation - How to have all my tests pass? JAVA
- Why does the map size change?
- Complexity in Union of disjointed sets with lists
- Hash collisions in Golang map resolving
- C++ ordered map optimized with index access
- How to sort this list of strings along with the strings and output the result as expected?
- Why deleting an element in a linkedlist costs O(1)
Related Questions in SPLAY-TREE
- Lost on splay tree implementation
- SplayTreeSet contains duplicate values
- Splay Tree insertion time efficiency with different input cases
- Get the index upon insertion in SplayTreeSet in dart
- How do implement a remove function in a splay tree?
- Time complexity of Map containsKey and containsValue in Dart
- Looping over a SplayTreeMap doesn't give values with duplicated keys
- Bottom up Splay trees vs Top down splay trees
- Is there a better way to do a self-reference pointer in the base class that also works in derived classes?
- How can I design this function to work in logarithmic time?
- How to delete min element in splay tree
- Implementing a splay tree
- Splay Tree Implementation
- Why is amortized analysis of splay tree only focusing on the splay operation and not accounting for the downwards search
- Why is splay tree in textbook different than mine?
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
You can do this using lazy updates. The idea is to put in each node a field into each node that says “this node, and all nodes below it, implicitly have Δ added to all their values.” When performing a rotation in your splay logic, you can then push this delta value down.
To add an amount to all values in a range, start off by doing a search for the lowest common ancestor of the nodes in the range (this is the node where one end of the range is in one direction and the other is in the other). Update the delta field there, which adds delta to all the nodes in that subtree. This includes all the nodes you want, plus some you don’t. From there, do a pair of predecessor/successor searches for the min/max elements of the range. As you do those searches, which will walk you down from the LCA to two leaves, update the delta fields of the nodes you encounter outside of the range to undo the delta you added in at the LCA. (More precisely, as you walk down, every time you step out of the range add -Δ at the node to undo the application of the delta, and when you step back in the range add Δ to the node to correct for it.)
This does two root-to-leaf walks, and provided you splay both at the end the amortized cost of the update is O(log n).