Square Root (Sqrt) Decomposition Algorithm Using JavaScript Array Last Updated : 13 Sep, 2023 Comments Improve Suggest changes Like Article Like Report In this article, we are going to learn how we can use the Square Root (Sqrt) Decomposition Algorithm using a JavaScript array. The square Root Decomposition Technique is one of the most common query optimization techniques used by competitive programmers. This technique helps us to reduce Time Complexity by a factor of sqrt(N). Approaches for Square Root (Sqrt) Decomposition Algorithm: Brute force Efficient approachSquare Root (Sqrt) Decomposition Algorithm Using Brute forceIn this approach, we simply iterate over each element in the range l to r and calculate its corresponding answer.Let’s consider these chunks or blocks as an individual array each of which contains sqrt(N) elements and you have computed your desired answer(according to your problem) individually for all the chunks.Now, you need to answer certain queries asking you the answer for the elements in the range l to r(l and r are starting and ending indices of the array) in the original n-sized array.Simply iterate over each element in the range l to r calculate its sum and return it for an answer. Example: JavaScript const MAXN = 20000; const arr = []; // Function for sqrt decomposition function query(l, r) { let sum = 0; for (let i = l; i <= r; i++) { sum += arr[i]; } return sum; } // Driver code function main() { const input = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]; const n = input.length; arr.push(...input); console.log("query(3,8) : ", query(3, 8)); console.log("query(1,6) : ", query(1, 6)); arr[5] = 0; console.log("query(6,6) : ", query(6, 6)); } main(); Outputquery(3,8) : 27 query(1,6) : 39 query(6,6) : 4 Time Complexity: O(N) We can deal with these types of queries by summing the data from the completely overlapped decomposed blocks lying in the query range and then summing elements oneby one from the original array whose corresponding block is not completely overlapped by the query range. So the answer for the above query in the described image will be: ans = 5 + 2 + 11 + 3 = 21 Efficient approachIn this approach, we simply find the block in which the given index lies, then subtract its previous value and add the new updated value as per the point update query. We have constructed the decomposed array of sqrt(N) blocks and now we need to print the sum of elements in a given range. The range may totally cover the continuous sqrt blocks. So we can easily answer the sum of values in this range as the sum of completely overlapped blocks. Example: JavaScript let MAXN = 10000; let SQRSIZE = 100; let arr = new Array(MAXN); for (let i = 0; i < MAXN; i++) { arr[i] = 0; } let block = new Array(SQRSIZE); for (let i = 0; i < SQRSIZE; i++) { block[i] = 0; } let x; // Function for updating value // at specific index // of an array function update(idx, val) { let blockNumber = idx / x; block[blockNumber] += val - arr[idx]; arr[idx] = val; } function query(l, r) { let sum = 0; while (l < r && l % x != 0 && l != 0) { // traversing first block in range sum += arr[l]; l++; } while (l + x - 1 <= r) { // Traversing completely // overlapped blocks in range sum += block[l / x]; l += x; } while (l <= r) { // Traversing last block in range sum += arr[l]; l++; } return sum; } // Fills values in input[] function preprocess(input, n) { // Initiating block pointer let x = -1; // Calculating size of block x = Math.floor(Math.sqrt(n)); // Building the decomposed array for (let i = 0; i < n; i++) { arr[i] = input[i]; if (i % x == 0) { // Entering next block // Incrementing block pointer x++; } block[x] += arr[i]; } } let input = [1, 5, 2, 4, 6, 1, 3, 5, 7, 10]; let n = input.length; preprocess(input, n); console.log("query(3,7) : " + query(3, 7)); console.log("query(4,4) : " + query(4, 4)); update(6, 0); console.log("query(5,5) : " + query(5, 5)); Outputquery(3,7) : 19 query(4,4) : 6 query(5,5) : 1 Time Complexity: O(sqrt(N)) Auxiliary Space: O(MAXN), since MAXN extra space has been taken, where MAXN is the maximum value of N Comment More infoAdvertise with us Next Article Square Root (Sqrt) Decomposition Algorithm Using JavaScript Array N nikhilgarg527 Follow Improve Article Tags : JavaScript Web Technologies javascript-array JavaScript-DSA JavaScript-Program +1 More Similar Reads Non-linear Components In electrical circuits, Non-linear Components are electronic devices that need an external power source to operate actively. Non-Linear Components are those that are changed with respect to the voltage and current. Elements that do not follow ohm's law are called Non-linear Components. Non-linear Co 11 min read JavaScript Tutorial JavaScript is a programming language used to create dynamic content for websites. It is a lightweight, cross-platform, and single-threaded programming language. It's an interpreted language that executes code line by line, providing more flexibility.JavaScript on Client Side: On the client side, Jav 11 min read Web Development Web development is the process of creating, building, and maintaining websites and web applications. It involves everything from web design to programming and database management. Web development is generally divided into three core areas: Frontend Development, Backend Development, and Full Stack De 5 min read Spring Boot Tutorial Spring Boot is a Java framework that makes it easier to create and run Java applications. It simplifies the configuration and setup process, allowing developers to focus more on writing code for their applications. This Spring Boot Tutorial is a comprehensive guide that covers both basic and advance 10 min read React Interview Questions and Answers React is an efficient, flexible, and open-source JavaScript library that allows developers to create simple, fast, and scalable web applications. Jordan Walke, a software engineer who was working for Facebook, created React. Developers with a JavaScript background can easily develop web applications 15+ min read Class Diagram | Unified Modeling Language (UML) A UML class diagram is a visual tool that represents the structure of a system by showing its classes, attributes, methods, and the relationships between them. It helps everyone involved in a projectâlike developers and designersâunderstand how the system is organized and how its components interact 12 min read Steady State Response In this article, we are going to discuss the steady-state response. We will see what is steady state response in Time domain analysis. We will then discuss some of the standard test signals used in finding the response of a response. We also discuss the first-order response for different signals. We 9 min read JavaScript Interview Questions and Answers JavaScript (JS) is the most popular lightweight, scripting, and interpreted programming language. JavaScript is well-known as a scripting language for web pages, mobile apps, web servers, and many other platforms. Both front-end and back-end developers need to have a strong command of JavaScript, as 15+ min read React Tutorial React is a JavaScript Library known for front-end development (or user interface). It is popular due to its component-based architecture, Single Page Applications (SPAs), and Virtual DOM for building web applications that are fast, efficient, and scalable.Applications are built using reusable compon 8 min read Backpropagation in Neural Network Back Propagation is also known as "Backward Propagation of Errors" is a method used to train neural network . Its goal is to reduce the difference between the modelâs predicted output and the actual output by adjusting the weights and biases in the network.It works iteratively to adjust weights and 9 min read Like