{"id":2296,"date":"2020-07-27T14:54:03","date_gmt":"2020-07-27T14:54:03","guid":{"rendered":"https:\/\/blog.prepbytes.com\/?p=2296"},"modified":"2022-04-08T10:51:16","modified_gmt":"2022-04-08T10:51:16","slug":"min-query-image-not-added","status":"publish","type":"post","link":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/","title":{"rendered":"Min Query"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1649414456077-Min%20Query.png\" alt=\"\" \/><\/p>\n<h3>Concepts Used<\/h3>\n<blockquote>\n<p>Segment Trees<\/p>\n<\/blockquote>\n<h3>Difficulty Level<\/h3>\n<blockquote>\n<p>Easy<\/p>\n<\/blockquote>\n<h3>Problem Statement :<\/h3>\n<blockquote>\n<p>Given an array of <code>N<\/code> elements and Q queries. In each query he is given two values <code>l<\/code>, <code>r<\/code>.<br \/>\nWe have to find the minimum value of all the elements from <code>l<\/code> to <code>r<\/code>.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/mycode.prepbytes.com\/problems\/segment-trees\/QUERY\" title=\"Go to mycode.prepbytes.com\" target=\"_blank\" rel=\"noopener noreferrer\"><u><strong><\/strong><\/u><\/a><\/p>\n<h3>Solution Approach :<\/h3>\n<h4>Introduction :<\/h4>\n<blockquote>\n<p>Idea is to construct a <strong>segment tree<\/strong> with the leaf nodes having the array values and intermediate nodes stores the minimum value of the current subarray range.<br \/>\nFor Example : arr <code>{5,1,4,2,9}<\/code> is our array then segment tree will store values like this -&gt; <code>{5,1,4,2,9}-&gt;1 , {5,1,4}-&gt; 1, {5,1}-&gt; 1, {5}-&gt; 5(leaf), {1}-&gt;1 (leaf), {2,9}-&gt;2, {2}-&gt;2(leaf), {9}-&gt;9 (leaf)<\/code>. <\/p>\n<\/blockquote>\n<h4>Method 1 (Brute force):<\/h4>\n<blockquote>\n<p>We can search for the minimum value in the given range <code>l<\/code> to <code>r<\/code> for every query. This approach will work fine for smaller array sizes and queries, as it takes linear time to search for the minimum value for single query. As the size of the input increases this apprach will be huge drawback.<\/p>\n<\/blockquote>\n<h4>Method 2 (Segment Tree):<\/h4>\n<blockquote>\n<p>As the number of queries and array size is too large for linear search in every query, we will use <strong>segment tree<\/strong> to solve this problem.<br \/>\nA <strong>Segment Tree<\/strong> is a data structure which allows answering range queries very effectively over a large input. Each query takes logarithmic time. Range queries includes sum over a range, or finding a minimum value over a given range etc. Query be of any type we can use segment trees and modify it accordingly.<br \/>\nLeaf nodes of the tree stores the actual array values and intermediate nodes stores the information of subarrays with is require to solve the problem. Lets say if we have to find a sum between different ranges, so now the intermediate nodes will store the sum of the current subarray. We fill the nodes by recursively calling left and right subtree (dividing into segements), untill there is a single element left, which can be directly assigned the value of the array. Array representation of the tree is used to represent segment tree, where <code>(i*2)+1<\/code> represents the left node and <code>(i*2)+2<\/code> represents right node, parent will be represented by <code>(i-1)\/2<\/code> for every index <code>i<\/code>.<\/p>\n<p>We will <strong>construct<\/strong> our tree by starting at the original array and dividing it into two halves (left and right), untill there is a single element left (leaf) which can directly be filled with <code>a[i]<\/code> for any index <code>i<\/code>. Now for every range say <code>l<\/code> to <code>r<\/code>, we will store the minimum value of this range in the node. <\/p>\n<p>Now that our tree is constructed, we will <strong>answer queries<\/strong> (minimum value in the given range). The queries can be of <code>3<\/code> types: <\/p>\n<ol>\n<li>The range of the tree exactly matches with the query, in this case we will return the value stored in this node.<\/li>\n<li>The range either belongs to the <code>left<\/code> or <code>right<\/code> node, in this case we will make two recursive calls for <code>left<\/code> and <code>right<\/code> subtrees respectively.<\/li>\n<li>The range overlaps with two of more ranges, in this case we are forced to go to the lower levels of both subtrees and find the minimum value which fits the range and finally return the least of them.<\/li>\n<\/ol>\n<\/blockquote>\n<p><img decoding=\"async\" src=\"https:\/\/prepbytes.com\/blog\/wp-content\/uploads\/2020\/07\/query.png\" alt=\"\" \/><\/p>\n<h3>Algorithm :<\/h3>\n<h4>construct():<\/h4>\n<blockquote>\n<ul>\n<li>if the current node is a leaf (subarray contains single element), assign the value directly, <code>(tree[curr]= arr[l])<\/code>.<\/li>\n<li>break the tree into two halves by recursively calling for left and right subtree, <code>construct(l,mid)<\/code> and <code>construct(mid+1,r)<\/code><\/li>\n<li>fill the current node with the minimum of left &amp; right node. <code>(tree[curr] = min ((i*2)+1,(i*2)+2)<\/code>.<\/li>\n<\/ul>\n<\/blockquote>\n<h4>RMQ():<\/h4>\n<blockquote>\n<ul>\n<li>if range is within the current range, return the value stored in node.<\/li>\n<li>if range is completely outside, return undefined.<\/li>\n<li>else return the minimum of left &amp; right subtrees.<\/li>\n<\/ul>\n<\/blockquote>\n<h3>Complexity Analysis :<\/h3>\n<blockquote>\n<p>In segment tree, preprocessing time is <code>O(n)<\/code> and worst time to for range minimum query is equivalent to the height of the tree.<\/p>\n<p>The <strong>space complexity<\/strong> is <code>O(n)<\/code> to store the segment tree.<\/p>\n<\/blockquote>\n<h3>Solutions:<\/h3>\n<p>\t\t\t\t\t\t<style>\r\n\t\t\t\t\r\n\t\t\t\t\t#tab_container_2298 {\r\n\toverflow:hidden;\r\n\tdisplay:block;\r\n\twidth:100%;\r\n\tborder:0px solid #ddd;\r\n\tmargin-bottom:30px;\r\n\t}\r\n\r\n#tab_container_2298 .tab-content{\r\n\tpadding:20px;\r\n\tborder: 1px solid #e6e6e6 !important;\r\n\tmargin-top: 0px;\r\n\tbackground-color:#ffffff !important;\r\n\tcolor: #000000 !important;\r\n\tfont-size:16px !important;\r\n\tfont-family: Open Sans !important;\r\n\t\r\n\t\tborder: 1px solid #e6e6e6 !important;\r\n\t}\r\n#tab_container_2298 .wpsm_nav-tabs {\r\n    border-bottom: 0px solid #ddd;\r\n}\r\n#tab_container_2298 .wpsm_nav-tabs > li.active > a, #tab_container_2298 .wpsm_nav-tabs > li.active > a:hover, #tab_container_2298 .wpsm_nav-tabs > li.active > a:focus {\r\n\tcolor: #000000 !important;\r\n\tcursor: default;\r\n\tbackground-color: #ffffff !important;\r\n\tborder: 1px solid #e6e6e6 !important;\r\n}\r\n\r\n#tab_container_2298 .wpsm_nav-tabs > li > a {\r\n    margin-right: 0px !important; \r\n    line-height: 1.42857143 !important;\r\n    border: 1px solid #d5d5d5 !important;\r\n    border-radius: 0px 0px 0 0 !important; \r\n\tbackground-color: #e8e8e8 !important;\r\n\tcolor: #000000 !important;\r\n\tpadding: 15px 18px 15px 18px !important;\r\n\ttext-decoration: none !important;\r\n\tfont-size: 14px !important;\r\n\ttext-align:center !important;\r\n\tfont-family: Open Sans !important;\r\n}\r\n#tab_container_2298 .wpsm_nav-tabs > li > a:focus {\r\noutline: 0px !important;\r\n}\r\n\r\n#tab_container_2298 .wpsm_nav-tabs > li > a:before {\r\n\tdisplay:none !important;\r\n}\r\n#tab_container_2298 .wpsm_nav-tabs > li > a:after {\r\n\tdisplay:none !important ;\r\n}\r\n#tab_container_2298 .wpsm_nav-tabs > li{\r\npadding:0px !important ;\r\nmargin:0px;\r\n}\r\n\r\n#tab_container_2298 .wpsm_nav-tabs > li > a:hover , #tab_container_2298 .wpsm_nav-tabs > li > a:focus {\r\n    color: #000000 !important;\r\n    background-color: #e8e8e8 !important;\r\n\tborder: 1px solid #d5d5d5 !important;\r\n\t\r\n}\r\n#tab_container_2298 .wpsm_nav-tabs > li > a .fa{\r\n\r\nmargin-right:5px !important;\r\n\r\nmargin-left:5px !important;\r\n\r\n\r\n}\r\n\r\n\t\t#tab_container_2298 .wpsm_nav-tabs a{\r\n\t\t\tbackground-image: none;\r\n\t\t\tbackground-position: 0 0;\r\n\t\t\tbackground-repeat: repeat-x;\r\n\t\t}\r\n\t\t\t\r\n\r\n\r\n#tab_container_2298 .wpsm_nav-tabs > li {\r\n    float: left;\r\n    margin-bottom: -1px !important;\r\n\tmargin-right:0px !important; \r\n}\r\n\r\n\r\n#tab_container_2298 .tab-content{\r\noverflow:hidden !important;\r\n}\r\n\r\n\r\n@media (min-width: 769px) {\r\n\r\n\t#tab_container_2298 .wpsm_nav-tabs > li{\r\n\t\tfloat:left !important ;\r\n\t\t\t\tmargin-right:-1px !important;\r\n\t\t\t\t\t}\r\n\t#tab_container_2298 .wpsm_nav-tabs{\r\n\t\tfloat:none !important;\r\n\t\tmargin:0px !important;\r\n\t}\r\n\r\n\t#tab_container_2298 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_2298 .wpsm_nav{\r\n\t\t\t}\r\n\r\n}\r\n\r\n\r\n\r\n@media (max-width: 768px) {\r\n\t#tab_container_2298 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_2298 .wpsm_nav{\r\n\t\t\t}\r\n}\r\n\r\n\r\n\t.wpsm_nav-tabs li:before{\r\n\t\tdisplay:none !important;\r\n\t}\r\n\r\n\t@media (max-width: 768px) {\r\n\t\t\t\t\r\n\t\t\t\t.wpsm_nav-tabs{\r\n\t\t\tmargin-left:0px !important;\r\n\t\t\tmargin-right:0px !important; \r\n\t\t\t\r\n\t\t}\r\n\t\t\t\t#tab_container_2298 .wpsm_nav-tabs > li{\r\n\t\t\tfloat:none !important;\r\n\t\t}\r\n\t\t\t\r\n\t}\t\t\t\t<\/style>\r\n\t\t\t\t<div id=\"tab_container_2298\" >\r\n\t \r\n\t\t\t\t\t<ul class=\"wpsm_nav wpsm_nav-tabs\" role=\"tablist\" id=\"myTab_2298\">\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  class=\"active\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_2298_1\" aria-controls=\"tabs_desc_2298_1\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>C<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_2298_2\" aria-controls=\"tabs_desc_2298_2\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>C++<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_2298_3\" aria-controls=\"tabs_desc_2298_3\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>Java<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\t\t\t\t <\/ul>\r\n\r\n\t\t\t\t\t  <!-- Tab panes -->\r\n\t\t\t\t\t  <div class=\"tab-content\" id=\"tab-content_2298\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane  in active \" id=\"tabs_desc_2298_1\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"c\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n#include &lt;stdio.h&gt; \r\n#include &lt;math.h&gt; \r\n#include &lt;limits.h&gt; \r\n#include&lt;stdlib.h&gt;\r\n\r\n\r\nint minVal(int x, int y) { return (x &lt; y)? x: y; } \r\n\r\n\r\nint getMid(int s, int e) { return s + (e -s)\/2; } \r\n\r\nint RMQUtil(int *st, int ss, int se, int qs, int qe, int index) \r\n{ \r\n\r\n    if (qs &lt;= ss &amp;&amp; qe &gt;= se) \r\n        return st[index]; \r\n\r\n    if (se &lt; qs || ss &gt; qe) \r\n        return INT_MAX; \r\n\r\n    int mid = getMid(ss, se); \r\n    return minVal(RMQUtil(st, ss, mid, qs, qe, 2*index+1), \r\n                RMQUtil(st, mid+1, se, qs, qe, 2*index+2)); \r\n} \r\n\r\nint RMQ(int *st, int n, int qs, int qe) \r\n{ \r\n\r\n    if (qs &lt; 0 || qe &gt; n-1 || qs &gt; qe) \r\n    { \r\n        return -1; \r\n    } \r\n\r\n    return RMQUtil(st, 0, n-1, qs, qe, 0); \r\n} \r\n\r\n\r\nint constructSTUtil(int arr[], int ss, int se, int *st, int si) \r\n{ \r\n\r\n    if (ss == se) \r\n    { \r\n        st[si] = arr[ss]; \r\n        return arr[ss]; \r\n    } \r\n\r\n\r\n    int mid = getMid(ss, se); \r\n    st[si] = minVal(constructSTUtil(arr, ss, mid, st, si*2+1), \r\n                    constructSTUtil(arr, mid+1, se, st, si*2+2)); \r\n    return st[si]; \r\n} \r\n\r\nint *constructST(int arr[], int n) \r\n{ \r\n\r\n    int x = (int)(ceil(log2(n))); \r\n\r\n    int max_size = 2*(int)pow(2, x) - 1; \r\n\r\n    int *st = (int *)malloc(sizeof(int)*max_size); \r\n\r\n    constructSTUtil(arr, 0, n-1, st, 0); \r\n\r\n    return st; \r\n} \r\n\r\nint main() \r\n{ \r\n int t;\r\n scanf(&quot;%d&quot;,&amp;t);\r\n while(t--)\r\n {\r\n    int n;\r\n    scanf(&quot;%d&quot;,&amp;n);\r\n    int arr[n+1];\r\n    for(int i=0;i&lt;n;i++)\r\n     {\r\n       scanf(&quot;%d&quot;,&amp;arr[i]);\r\n     }\r\n\r\n    int *st = constructST(arr, n+1); \r\n    int q;\r\n    scanf(&quot;%d&quot;,&amp;q);\r\n    while(q--)\r\n    {\r\n    int l,r;\r\n    scanf(&quot;%d %d&quot;,&amp;l,&amp;r);\r\n    l -=1;\r\n    r -=1;\r\n\r\n    printf(&quot;%d&#92;n&quot;,RMQ(st, n+1, l,r)); \r\n    }\r\n }\r\n\r\n    return 0; \r\n} \r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane \" id=\"tabs_desc_2298_2\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"cpp\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n#include &lt;bits\/stdc++.h&gt; \r\nusing namespace std; \r\n\r\nint minVal(int x, int y) { return (x &lt; y)? x: y; } \r\n\r\nint getMid(int s, int e) { return s + (e -s)\/2; } \r\n\r\n\r\nint RMQUtil(int *st, int ss, int se, int qs, int qe, int index) \r\n{ \r\n\r\n    if (qs &lt;= ss &amp;&amp; qe &gt;= se) \r\n        return st[index]; \r\n\r\n\r\n    if (se &lt; qs || ss &gt; qe) \r\n        return INT_MAX; \r\n\r\n    int mid = getMid(ss, se); \r\n    return minVal(RMQUtil(st, ss, mid, qs, qe, 2*index+1), \r\n                RMQUtil(st, mid+1, se, qs, qe, 2*index+2)); \r\n} \r\n\r\nint RMQ(int *st, int n, int qs, int qe) \r\n{ \r\n    \/\/ Check for erroneous input values \r\n    if (qs &lt; 0 || qe &gt; n-1 || qs &gt; qe) \r\n    { \r\n        cout&lt;&lt;&quot;Invalid Input&quot;; \r\n        return -1; \r\n    } \r\n\r\n    return RMQUtil(st, 0, n-1, qs, qe, 0); \r\n} \r\n\r\nint constructSTUtil(int arr[], int ss, int se, \r\n                                int *st, int si) \r\n{ \r\n\r\n    if (ss == se) \r\n    { \r\n        st[si] = arr[ss]; \r\n        return arr[ss]; \r\n    } \r\n\r\n    int mid = getMid(ss, se); \r\n    st[si] = minVal(constructSTUtil(arr, ss, mid, st, si*2+1), \r\n                    constructSTUtil(arr, mid+1, se, st, si*2+2)); \r\n    return st[si]; \r\n} \r\n\r\n\r\nint *constructST(int arr[], int n) \r\n{ \r\n\r\n    int x = (int)(ceil(log2(n))); \r\n\r\n    int max_size = 2*(int)pow(2, x) - 1; \r\n\r\n    int *st = new int[max_size]; \r\n\r\n    constructSTUtil(arr, 0, n-1, st, 0); \r\n\r\n\r\n    return st; \r\n} \r\n\r\nint main() \r\n{ \r\n  int t;\r\n  cin&gt;&gt;t;\r\n  while(t--)\r\n  {\r\n      int n;\r\n      cin&gt;&gt;n;\r\n      int arr[n];\r\n      for(int i=0;i&lt;n;i++)\r\n       cin&gt;&gt;arr[i];\r\n      int *st = constructST(arr, n); \r\n    int q;\r\n    cin&gt;&gt;q;\r\n    while(q--)\r\n    {\r\n        int l,r;\r\n        cin&gt;&gt;l&gt;&gt;r;\r\n        l -=1;\r\n        r-=1;\r\n        cout&lt;&lt;RMQ(st, n, l,r)&lt;&lt;endl; \r\n    }\r\n  }\r\n\r\n    return 0; \r\n} \r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane \" id=\"tabs_desc_2298_3\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"java\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\nimport java.util.*;\r\n\r\nclass Main\r\n{ \r\n    int st[]; \/\/array to store segment tree \r\n\r\n    int minVal(int x, int y) { \r\n        return (x &lt; y) ? x : y; \r\n    } \r\n\r\n    int getMid(int s, int e) { \r\n        return s + (e - s) \/ 2; \r\n    } \r\n\r\n    int RMQUtil(int ss, int se, int qs, int qe, int index) \r\n    { \r\n        if (qs &lt;= ss &amp;&amp; qe &gt;= se) \r\n            return st[index]; \r\n\r\n        if (se &lt; qs || ss &gt; qe) \r\n            return Integer.MAX_VALUE; \r\n\r\n        int mid = getMid(ss, se); \r\n        return minVal(RMQUtil(ss, mid, qs, qe, 2 * index + 1), \r\n                RMQUtil(mid + 1, se, qs, qe, 2 * index + 2)); \r\n    } \r\n\r\n    int RMQ(int n, int qs, int qe) \r\n    { \r\n\r\n        if (qs &lt; 0 || qe &gt; n - 1 || qs &gt; qe) { \r\n            System.out.println(&quot;Invalid Input&quot;); \r\n            return -1; \r\n        } \r\n\r\n        return RMQUtil(0, n - 1, qs, qe, 0); \r\n    } \r\n\r\n    int constructSTUtil(int arr[], int ss, int se, int si) \r\n    { \r\n\r\n        if (ss == se) { \r\n            st[si] = arr[ss]; \r\n            return arr[ss]; \r\n        } \r\n\r\n        int mid = getMid(ss, se); \r\n        st[si] = minVal(constructSTUtil(arr, ss, mid, si * 2 + 1), \r\n                constructSTUtil(arr, mid + 1, se, si * 2 + 2)); \r\n        return st[si]; \r\n    } \r\n\r\n    void constructST(int arr[], int n) \r\n    { \r\n      int x = (int) (Math.ceil(Math.log(n) \/ Math.log(2))); \r\n\r\n        \/\/Maximum size of segment tree \r\n        int max_size = 2 * (int) Math.pow(2, x) - 1; \r\n        st = new int[max_size]; \/\/ allocate memory \r\n\r\n        \/\/ Fill the allocated memory st \r\n        constructSTUtil(arr, 0, n - 1, 0); \r\n    } \r\n\r\n    \/\/ Driver program to test above functions \r\n    public static void main(String args[]) \r\n    { \r\n      Scanner sc = new Scanner(System.in);\r\n      int t = sc.nextInt();\r\n      while(t--&gt;0)\r\n      {\r\n          int n =sc.nextInt();\r\n          int []arr = new int [n];\r\n          for(int i=0;i&lt;n;i++)\r\n           arr[i] = sc.nextInt();\r\n\r\n          Main tree = new Main();\r\n          tree.constructST(arr, n); \r\n          int q = sc.nextInt();\r\n          while(q--&gt;0)\r\n          {\r\n\r\n          int qs = sc.nextInt()-1; \/\/ Starting index of query range \r\n          int qe = sc.nextInt()-1; \/\/ Ending index of query range \r\n\r\n          System.out.println(tree.RMQ(n, qs, qe)); \r\n          }\r\n      }\r\n    } \r\n} \r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t <\/div>\r\n\t\t\t\t\t \r\n\t\t\t\t <\/div>\r\n <script>\r\n\t\tjQuery(function () {\r\n\t\t\tjQuery('#myTab_2298 a:first').tab('show')\r\n\t\t});\r\n\t\t\r\n\t\t\t\tjQuery(function(){\r\n\t\t\tvar b=\"fadeIn\";\r\n\t\t\tvar c;\r\n\t\t\tvar a;\r\n\t\t\td(jQuery(\"#myTab_2298 a\"),jQuery(\"#tab-content_2298\"));function d(e,f,g){\r\n\t\t\t\te.click(function(i){\r\n\t\t\t\t\ti.preventDefault();\r\n\t\t\t\t\tjQuery(this).tab(\"show\");\r\n\t\t\t\t\tvar h=jQuery(this).data(\"easein\");\r\n\t\t\t\t\tif(c){c.removeClass(a);}\r\n\t\t\t\t\tif(h){f.find(\"div.active\").addClass(\"animated \"+h);a=h;}\r\n\t\t\t\t\telse{if(g){f.find(\"div.active\").addClass(\"animated \"+g);a=g;}else{f.find(\"div.active\").addClass(\"animated \"+b);a=b;}}c=f.find(\"div.active\");\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\r\n\t\tfunction do_resize(){\r\n\r\n\t\t\tvar width=jQuery( '.tab-content .tab-pane iframe' ).width();\r\n\t\t\tvar height=jQuery( '.tab-content .tab-pane iframe' ).height();\r\n\r\n\t\t\tvar toggleSize = true;\r\n\t\t\tjQuery('iframe').animate({\r\n\t\t\t    width: toggleSize ? width : 640,\r\n\t\t\t    height: toggleSize ? height : 360\r\n\t\t\t  }, 250);\r\n\r\n\t\t\t  toggleSize = !toggleSize;\r\n\t\t}\r\n\r\n\r\n\t<\/script>\r\n\t\t\t\t\r\n\t\t\t<br \/>\n[forminator_quiz id=&quot;2299&quot;]<\/p>\n<p>This article tried to discuss the concept of <strong>Segment Trees<\/strong>. Hope this blog helps you understand and solve the problem. To practice more problems on Segment Trees you can check out <a href=\"#\"><\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Concepts Used Segment Trees Difficulty Level Easy Problem Statement : Given an array of N elements and Q queries. In each query he is given two values l, r. We have to find the minimum value of all the elements from l to r. Solution Approach : Introduction : Idea is to construct a segment [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[112],"tags":[],"class_list":["post-2296","post","type-post","status-publish","format-standard","hentry","category-trees-interview-questions"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Trees Interview Questions | Min Query Image Not Added|<\/title>\n<meta name=\"description\" content=\"Preprocessing Time Is O(n) and Worst Time to for Range Minimum Query Is Equivalent to the Height of the Tree.the Space Complexity Is O(n) to Store the Segment Tree.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Trees Interview Questions | Min Query Image Not Added|\" \/>\n<meta property=\"og:description\" content=\"Preprocessing Time Is O(n) and Worst Time to for Range Minimum Query Is Equivalent to the Height of the Tree.the Space Complexity Is O(n) to Store the Segment Tree.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/\" \/>\n<meta property=\"og:site_name\" content=\"PrepBytes Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prepbytes0211\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-27T14:54:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-08T10:51:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1649414456077-Min%20Query.png\" \/>\n<meta name=\"author\" content=\"Prepbytes\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Prepbytes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/\"},\"author\":{\"name\":\"Prepbytes\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\"},\"headline\":\"Min Query\",\"datePublished\":\"2020-07-27T14:54:03+00:00\",\"dateModified\":\"2022-04-08T10:51:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/\"},\"wordCount\":640,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1649414456077-Min%20Query.png\",\"articleSection\":[\"Trees Interview Questions\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/\",\"url\":\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/\",\"name\":\"Trees Interview Questions | Min Query Image Not Added|\",\"isPartOf\":{\"@id\":\"http:\/\/43.205.93.38\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1649414456077-Min%20Query.png\",\"datePublished\":\"2020-07-27T14:54:03+00:00\",\"dateModified\":\"2022-04-08T10:51:16+00:00\",\"description\":\"Preprocessing Time Is O(n) and Worst Time to for Range Minimum Query Is Equivalent to the Height of the Tree.the Space Complexity Is O(n) to Store the Segment Tree.\",\"breadcrumb\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#primaryimage\",\"url\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1649414456077-Min%20Query.png\",\"contentUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1649414456077-Min%20Query.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/43.205.93.38\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Trees Interview Questions\",\"item\":\"https:\/\/prepbytes.com\/blog\/category\/trees-interview-questions\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Min Query\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/43.205.93.38\/#website\",\"url\":\"http:\/\/43.205.93.38\/\",\"name\":\"PrepBytes Blog\",\"description\":\"ONE-STOP RESOURCE FOR EVERYTHING RELATED TO CODING\",\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/43.205.93.38\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"http:\/\/43.205.93.38\/#organization\",\"name\":\"Prepbytes\",\"url\":\"http:\/\/43.205.93.38\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp\",\"contentUrl\":\"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp\",\"width\":160,\"height\":160,\"caption\":\"Prepbytes\"},\"image\":{\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/prepbytes0211\/\",\"https:\/\/www.instagram.com\/prepbytes\/\",\"https:\/\/www.linkedin.com\/company\/prepbytes\/\",\"https:\/\/www.youtube.com\/channel\/UC0xGnHDrjUM1pDEK2Ka5imA\"]},{\"@type\":\"Person\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\",\"name\":\"Prepbytes\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g\",\"caption\":\"Prepbytes\"},\"url\":\"https:\/\/prepbytes.com\/blog\/author\/gourav-jaincollegedekho-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Trees Interview Questions | Min Query Image Not Added|","description":"Preprocessing Time Is O(n) and Worst Time to for Range Minimum Query Is Equivalent to the Height of the Tree.the Space Complexity Is O(n) to Store the Segment Tree.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/","og_locale":"en_US","og_type":"article","og_title":"Trees Interview Questions | Min Query Image Not Added|","og_description":"Preprocessing Time Is O(n) and Worst Time to for Range Minimum Query Is Equivalent to the Height of the Tree.the Space Complexity Is O(n) to Store the Segment Tree.","og_url":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/","og_site_name":"PrepBytes Blog","article_publisher":"https:\/\/www.facebook.com\/prepbytes0211\/","article_published_time":"2020-07-27T14:54:03+00:00","article_modified_time":"2022-04-08T10:51:16+00:00","og_image":[{"url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1649414456077-Min%20Query.png","type":"","width":"","height":""}],"author":"Prepbytes","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Prepbytes","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#article","isPartOf":{"@id":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/"},"author":{"name":"Prepbytes","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e"},"headline":"Min Query","datePublished":"2020-07-27T14:54:03+00:00","dateModified":"2022-04-08T10:51:16+00:00","mainEntityOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/"},"wordCount":640,"commentCount":0,"publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1649414456077-Min%20Query.png","articleSection":["Trees Interview Questions"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/","url":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/","name":"Trees Interview Questions | Min Query Image Not Added|","isPartOf":{"@id":"http:\/\/43.205.93.38\/#website"},"primaryImageOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#primaryimage"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1649414456077-Min%20Query.png","datePublished":"2020-07-27T14:54:03+00:00","dateModified":"2022-04-08T10:51:16+00:00","description":"Preprocessing Time Is O(n) and Worst Time to for Range Minimum Query Is Equivalent to the Height of the Tree.the Space Complexity Is O(n) to Store the Segment Tree.","breadcrumb":{"@id":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#primaryimage","url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1649414456077-Min%20Query.png","contentUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1649414456077-Min%20Query.png"},{"@type":"BreadcrumbList","@id":"https:\/\/prepbytes.com\/blog\/min-query-image-not-added\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/43.205.93.38\/"},{"@type":"ListItem","position":2,"name":"Trees Interview Questions","item":"https:\/\/prepbytes.com\/blog\/category\/trees-interview-questions\/"},{"@type":"ListItem","position":3,"name":"Min Query"}]},{"@type":"WebSite","@id":"http:\/\/43.205.93.38\/#website","url":"http:\/\/43.205.93.38\/","name":"PrepBytes Blog","description":"ONE-STOP RESOURCE FOR EVERYTHING RELATED TO CODING","publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/43.205.93.38\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"http:\/\/43.205.93.38\/#organization","name":"Prepbytes","url":"http:\/\/43.205.93.38\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/","url":"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp","contentUrl":"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp","width":160,"height":160,"caption":"Prepbytes"},"image":{"@id":"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/prepbytes0211\/","https:\/\/www.instagram.com\/prepbytes\/","https:\/\/www.linkedin.com\/company\/prepbytes\/","https:\/\/www.youtube.com\/channel\/UC0xGnHDrjUM1pDEK2Ka5imA"]},{"@type":"Person","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e","name":"Prepbytes","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g","caption":"Prepbytes"},"url":"https:\/\/prepbytes.com\/blog\/author\/gourav-jaincollegedekho-com\/"}]}},"_links":{"self":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/2296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/comments?post=2296"}],"version-history":[{"count":12,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/2296\/revisions"}],"predecessor-version":[{"id":8457,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/2296\/revisions\/8457"}],"wp:attachment":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/media?parent=2296"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/categories?post=2296"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/tags?post=2296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}