{"id":2284,"date":"2020-06-15T03:38:19","date_gmt":"2020-06-15T03:38:19","guid":{"rendered":"https:\/\/blog.prepbytes.com\/?p=2284"},"modified":"2022-05-23T11:19:56","modified_gmt":"2022-05-23T11:19:56","slug":"consecutive-permutation","status":"publish","type":"post","link":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/","title":{"rendered":"Consecutive Permutation"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097496695-Article_289.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>Hard<\/p>\n<\/blockquote>\n<h3>Problem Statement :<\/h3>\n<blockquote>\n<p>Given an array of <code>N<\/code> unique elements and <code>Q<\/code> queries. In each query, we are given two values <code>l,r<\/code>. We want to know if there is a permutation of all the integers in this range such that in that permutation all the elements are consecutive. Print Yes if such a permutation exists else No.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/mycode.prepbytes.com\/problems\/segment-trees\/CONELE\" title=\"Go to mycode.prepbytes.com\" target=\"_blank\" rel=\"noopener noreferrer\"><u><strong><\/strong><\/u><\/a><\/p>\n<h3>Solution Approach :<\/h3>\n<p><strong>Introduction<\/strong> :<\/p>\n<blockquote>\n<p>We have to find where the array elements in the given range is<br \/>\nconsecutive or not. We can solve this problem using brute force approach or using segment tree. Basic idea is to keep track of the lowest and highest values of the array within the given range now the difference between these values is equal to the difference between the ranges then we can say the array elements are consecutive, else not.<\/p>\n<\/blockquote>\n<p><strong>Method 1 (Brute force)<\/strong>:<\/p>\n<blockquote>\n<p>We can calculate the minimum and maximum values within the given range in linear time for each query by sorting the array in increasing order. Then check whether the difference between these values and the given range is same or not.<\/p>\n<\/blockquote>\n<p><strong>Method 2 (Segment Tree)<\/strong>:<\/p>\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>.<br \/>\nWe will <strong>construct<\/strong> two segment trees, one for storing minimum values and other to store maximum values of the subarrays.<br \/>\nWe begin with 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 and maximum values of the current range in the node in first and second tree respectively.<br \/>\nNow that our tree is constructed, we will <strong>answer queries<\/strong> (minimum\/maximum of 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 the subtrees and find the gcd of the range which fits the  current range and finally return the minimum\/maximum of the values returned by both subtrees.<br \/>\nNow after retrieving the minimum and maximum values within the range from both segment trees we will check whether the difference <code>max - min +1<\/code> is equal to the range gap <code>r-l+1<\/code>. Since we are assuming array has distinct values this difference must be equal if the array elements are consecutive.<\/li>\n<\/ol>\n<\/blockquote>\n<p><img decoding=\"async\" src=\"https:\/\/prepbytes.com\/blog\/wp-content\/uploads\/2020\/06\/conele.png\" alt=\"\" \/><\/p>\n<h3>Algorithms :<\/h3>\n<p><strong>construct_min()<\/strong>:<\/p>\n<blockquote>\n<ul>\n<li>if the current node is a leaf (subarray contains single elemnt), 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(LeftSubtree , RightSubtree)<\/code>.<\/li>\n<\/ul>\n<\/blockquote>\n<p><strong>construct_max()<\/strong>:<\/p>\n<blockquote>\n<ul>\n<li>if the current node is a leaf (subarray contains single elemnt), 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 maximum of left &amp; right node. <code>(tree[curr] = max(LeftSubtree , RightSubtree)<\/code>.<\/li>\n<\/ul>\n<\/blockquote>\n<p><strong>RMQ_min()<\/strong>:<\/p>\n<blockquote>\n<ul>\n<li>if range is within the current range, return the value stored in node.<\/li>\n<li>if current range is outside the boundaries, return <code>-1<\/code>.<\/li>\n<li>else return the min of left &amp; right subtrees.<\/li>\n<\/ul>\n<\/blockquote>\n<p><strong>RMQ_max()<\/strong>:<\/p>\n<blockquote>\n<ul>\n<li>if range is within the current range, return the value stored in node.<\/li>\n<li>if current range is outside the boundaries, return <code>-1<\/code>.<\/li>\n<li>else return the max of left &amp; right subtrees.<\/li>\n<\/ul>\n<\/blockquote>\n<h3>Complexity Analysis :<\/h3>\n<blockquote>\n<p>In the brute force approach  the <strong>time complexity<\/strong> for sorting is <code>O(nlogn)<\/code>  and total time complexity will be <code>O(Q*nlogn)<\/code>.<br \/>\nIn segment tree, preprocessing time is <code>O(n)<\/code> for each tree and worst time to for range minimum\/maximum query is equivalent to the height of the tree.<br \/>\nThe <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_2286 {\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_2286 .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_2286 .wpsm_nav-tabs {\r\n    border-bottom: 0px solid #ddd;\r\n}\r\n#tab_container_2286 .wpsm_nav-tabs > li.active > a, #tab_container_2286 .wpsm_nav-tabs > li.active > a:hover, #tab_container_2286 .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_2286 .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_2286 .wpsm_nav-tabs > li > a:focus {\r\noutline: 0px !important;\r\n}\r\n\r\n#tab_container_2286 .wpsm_nav-tabs > li > a:before {\r\n\tdisplay:none !important;\r\n}\r\n#tab_container_2286 .wpsm_nav-tabs > li > a:after {\r\n\tdisplay:none !important ;\r\n}\r\n#tab_container_2286 .wpsm_nav-tabs > li{\r\npadding:0px !important ;\r\nmargin:0px;\r\n}\r\n\r\n#tab_container_2286 .wpsm_nav-tabs > li > a:hover , #tab_container_2286 .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_2286 .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_2286 .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_2286 .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_2286 .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_2286 .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_2286 .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_2286 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_2286 .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_2286 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_2286 .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_2286 .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_2286\" >\r\n\t \r\n\t\t\t\t\t<ul class=\"wpsm_nav wpsm_nav-tabs\" role=\"tablist\" id=\"myTab_2286\">\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_2286_1\" aria-controls=\"tabs_desc_2286_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_2286_2\" aria-controls=\"tabs_desc_2286_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_2286_3\" aria-controls=\"tabs_desc_2286_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_2286\">\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_2286_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<stdio.h>\r\n\r\nint tree_min[1000001], \r\n    tree_max[1000001]; \r\n\r\nint min(int a, int b) \r\n{ \r\n    return a < b ? a : b; \r\n} \r\n\r\nint max(int a, int b) \r\n{ \r\n    return a > b ? a : b; \r\n} \r\n\r\n\/\/ Segment tree for minimum element \r\nvoid build_min(int array[], int node, \r\n            int left, int right) \r\n{ \r\n    \/\/ If left is equal to right \r\n    if (left == right) \r\n        tree_min[node] = array[left]; \r\n\r\n    else { \r\n        \/\/ Divide the segment into equal halves \r\n        build_min(array, 2 * node, left, \r\n                (left + right) \/ 2); \r\n\r\n        build_min(array, 2 * node + 1, \r\n                (left + right) \/ 2 + 1, right); \r\n\r\n\r\n        tree_min[node] = min(tree_min[2 * node], \r\n                            tree_min[2 * node + 1]); \r\n    } \r\n} \r\n\r\nint query_min(int node, int c_l, \r\n            int c_r, int l, int r) \r\n{ \r\n    \/\/ Out of range \r\n    if (c_l > r || c_r < l) \r\n        return 1e9; \r\n\r\n    if (c_l >= l && c_r <= r) \r\n        return tree_min[node]; \r\n    else\r\n\r\n        return min(query_min(2 * node, c_l, \r\n                            (c_l + c_r) \/ 2, l, r), \r\n                query_min(2 * node + 1, \r\n                            (c_l + c_r) \/ 2 + 1, \r\n                            c_r, l, r)); \r\n} \r\n\r\nvoid build_max(int array[], int node, \r\n            int left, int right) \r\n{ \r\n    \/\/ If left is equal to right \r\n    if (left == right) \r\n        tree_max[node] = array[left]; \r\n\r\n    else { \r\n\r\n        build_max(array, 2 * node, left, \r\n                (left + right) \/ 2); \r\n\r\n        build_max(array, 2 * node + 1, \r\n                (left + right) \/ 2 + 1, right); \r\n\r\n\r\n        tree_max[node] = max(tree_max[2 * node], \r\n                            tree_max[2 * node + 1]); \r\n    } \r\n} \r\n\r\n\r\nint query_max(int node, int c_l, \r\n            int c_r, int l, int r) \r\n{ \r\n    \/\/ Out of range \r\n    if (c_l > r || c_r < l) \r\n        return -1; \r\n\r\n    \/\/ Within the range completely \r\n    if (c_l >= l && c_r <= r) \r\n        return tree_max[node]; \r\n    else\r\n\r\n        return max(query_max(2 * node, c_l, \r\n                            (c_l + c_r) \/ 2, l, r), \r\n                query_max(2 * node + 1, \r\n                            (c_l + c_r) \/ 2 + 1, \r\n                            c_r, l, r)); \r\n} \r\n\r\nvoid init(int array[], int n) \r\n{ \r\n    build_min(array, 1, 0, n - 1); \r\n    build_max(array, 1, 0, n - 1); \r\n} \r\n\r\nint isConsecutive(int x, int y, int n) \r\n{ \r\n    return ((query_max(1, 0, n - 1, x, y) - query_min(1,0, n - 1, x, y))== (y - x));\r\n} \r\n\r\n\r\nint main() \r\n{ \r\n  int t;\r\n  scanf(\"%d\",&t);\r\n  while(t--)\r\n  {\r\n    int n;\r\n    scanf(\"%d\",&n);\r\n      int arr[n];\r\n      for(int i=0;i<n;i++)\r\n       scanf(\"%d\",&arr[i]);\r\n      init(arr, n); \r\n\r\n    int q;\r\n    scanf(\"%d\",&q);\r\n      for (int i = 0; i < q; i++) { \r\n          int l, r; \r\n          scanf(\"%d %d\",&l,&r);\r\n          printf(\"%s&#92;n\", (isConsecutive(l - 1, r - 1, n) ?\"Yes\" : \"No\")); \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_2286_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 <bits\/stdc++.h> \r\nusing namespace std; \r\n\r\n\/\/ Segment tree \r\nint tree_min[1000001], \r\n    tree_max[1000001]; \r\n\r\n\r\nint min(int a, int b) \r\n{ \r\n    return a < b ? a : b; \r\n} \r\n\r\nint max(int a, int b) \r\n{ \r\n    return a > b ? a : b; \r\n} \r\n\r\n\r\nvoid build_min(int array[], int node, \r\n            int left, int right) \r\n{ \r\n\r\n    if (left == right) \r\n        tree_min[node] = array[left]; \r\n\r\n    else { \r\n        build_min(array, 2 * node, left, \r\n                (left + right) \/ 2); \r\n\r\n        build_min(array, 2 * node + 1, \r\n                (left + right) \/ 2 + 1, right); \r\n\r\n        tree_min[node] = min(tree_min[2 * node], \r\n                            tree_min[2 * node + 1]); \r\n    } \r\n} \r\n\r\nint query_min(int node, int c_l, \r\n            int c_r, int l, int r) \r\n{ \r\n    \/\/ Out of range \r\n    if (c_l > r || c_r < l) \r\n        return 1e9; \r\n\r\n    if (c_l >= l && c_r <= r) \r\n        return tree_min[node]; \r\n    else\r\n\r\n        return min(query_min(2 * node, c_l, \r\n                            (c_l + c_r) \/ 2, l, r), \r\n                query_min(2 * node + 1, \r\n                            (c_l + c_r) \/ 2 + 1, \r\n                            c_r, l, r)); \r\n} \r\n\r\n\/\/ Segment tree for maximum element \r\nvoid build_max(int array[], int node, \r\n            int left, int right) \r\n{ \r\n    \/\/ If left is equal to right \r\n    if (left == right) \r\n        tree_max[node] = array[left]; \r\n\r\n    else { \r\n        \/\/ Divide the segment into equal halves \r\n        build_max(array, 2 * node, left, \r\n                (left + right) \/ 2); \r\n\r\n        build_max(array, 2 * node + 1, \r\n                (left + right) \/ 2 + 1, right); \r\n\r\n        tree_max[node] = max(tree_max[2 * node], \r\n                            tree_max[2 * node + 1]); \r\n    } \r\n} \r\n\r\nint query_max(int node, int c_l, \r\n            int c_r, int l, int r) \r\n{ \r\n    \/\/ Out of range \r\n    if (c_l > r || c_r < l) \r\n        return -1; \r\n\r\n    \/\/ Within the range completely \r\n    if (c_l >= l && c_r <= r) \r\n        return tree_max[node]; \r\n    else\r\n\r\n        return max(query_max(2 * node, c_l, \r\n                            (c_l + c_r) \/ 2, l, r), \r\n                query_max(2 * node + 1, \r\n                            (c_l + c_r) \/ 2 + 1, \r\n                            c_r, l, r)); \r\n} \r\n\r\n\/\/ Build the tree \r\nvoid init(int array[], int n) \r\n{ \r\n    build_min(array, 1, 0, n - 1); \r\n    build_max(array, 1, 0, n - 1); \r\n} \r\n\r\n\r\nbool isConsecutive(int x, int y, int n) \r\n{ \r\n    return ((query_max(1, 0, n - 1, x, y) \r\n            - query_min(1, 0, n - 1, x, y)) \r\n            == (y - x)); \r\n} \r\n\r\n\r\nint main() \r\n{ \r\n  int t;\r\n  cin>>t;\r\n  while(t--)\r\n  {\r\n    int n;\r\n    cin>>n;\r\n      int arr[n];\r\n      for(int i=0;i<n;i++)\r\n       cin>>arr[i];\r\n      init(arr, n); \r\n\r\n    int q;\r\n    cin>>q;\r\n      for (int i = 0; i < q; i++) { \r\n          int l, r; \r\n          cin>>l>>r;\r\n          cout << (isConsecutive(l - 1, r - 1, n) ?\"Yes\" : \"No\") << \"&#92;n\"; \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_2286_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\r\n    static int[] tree_min = new int[1000001]; \r\n    static int[] tree_max = new int[1000001]; \r\n\r\n    static int min(int a, int b) \r\n    { \r\n        return a < b ? a : b; \r\n    } \r\n\r\n    static int max(int a, int b) \r\n    { \r\n        return a > b ? a : b; \r\n    } \r\n\r\n    static void build_min(int array[], int node, int left, int right) \r\n    { \r\n        \/\/ If left is equal to right \r\n        if (left == right) \r\n            tree_min[node] = array[left]; \r\n\r\n        else\r\n        { \r\n            \/\/ Divide the segment into equal halves \r\n            build_min(array, 2 * node, left, (left + right) \/ 2); \r\n\r\n            build_min(array, 2 * node + 1, \r\n                    (left + right) \/ 2 + 1, right); \r\n\r\n            tree_min[node] = Math.min(tree_min[2 * node], \r\n                    tree_min[2 * node + 1]); \r\n        } \r\n    } \r\n\r\n\r\n    static int query_min(int node, int c_l, int c_r, int l, int r) \r\n    { \r\n        \/\/ Out of range \r\n        if (c_l > r || c_r < l) \r\n            return (int) 1e9; \r\n\r\n        \/\/ Within the range completely \r\n        if (c_l >= l && c_r <= r) \r\n            return tree_min[node]; \r\n        else\r\n\r\n            return min(query_min(2 * node, c_l, (c_l + c_r) \/ 2, l, r), \r\n                    query_min(2 * node + 1, (c_l + c_r) \/ 2 + 1, c_r, l, r)); \r\n    } \r\n\r\n    \/\/ Segment tree for maximum element \r\n    static void build_max(int array[], int node, int left, int right) \r\n    { \r\n        \/\/ If left is equal to right \r\n        if (left == right) \r\n            tree_max[node] = array[left]; \r\n\r\n        else\r\n        { \r\n            \/\/ Divide the segment into equal halves \r\n            build_max(array, 2 * node, left, (left + right) \/ 2); \r\n\r\n            build_max(array, 2 * node + 1, (left + right) \/ 2 + 1, right); \r\n\r\n            tree_max[node] = Math.max(tree_max[2 * node], \r\n                    tree_max[2 * node + 1]); \r\n        } \r\n    } \r\n\r\n\r\n    static int query_max(int node, int c_l, int c_r, int l, int r) \r\n    { \r\n        \/\/ Out of range \r\n        if (c_l > r || c_r < l) \r\n            return -1; \r\n\r\n        \/\/ Within the range completely \r\n        if (c_l >= l && c_r <= r) \r\n            return tree_max[node]; \r\n        else\r\n\r\n            return Math.max(query_max(2 * node, c_l, (c_l + c_r) \/ 2, l, r), \r\n                    query_max(2 * node + 1, (c_l + c_r) \/ 2 + 1, c_r, l, r)); \r\n    } \r\n\r\n    \/\/ Build the tree \r\n    static void init(int array[], int n) \r\n    { \r\n        build_min(array, 1, 0, n - 1); \r\n        build_max(array, 1, 0, n - 1); \r\n    } \r\n\r\n    \/\/ Check if the given range is Consecutive \r\n    static boolean isConsecutive(int x, int y, int n) \r\n    { \r\n        return ((query_max(1, 0, n - 1, x, y) - \r\n                query_min(1, 0, n - 1, x, y)) == (y - x)); \r\n    } \r\n\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-->0)\r\n      {\r\n        int n= sc.nextInt();\r\n          int []arr = new int [n];\r\n          for(int i=0;i<n;i++)\r\n           arr[i]= sc.nextInt();\r\n        int q = sc.nextInt();\r\n          init(arr, n); \r\n\r\n          for (int i = 0; i < q; i++) \r\n          { \r\n              int l, r; \r\n              l = sc.nextInt();\r\n              r = sc.nextInt();\r\n\r\n              System.out.print((isConsecutive(l - 1, r - 1, n) ? \r\n                      \"Yes\" : \"No\") + \"&#92;n\"); \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_2286 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_2286 a\"),jQuery(\"#tab-content_2286\"));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;2287&quot;]<\/p>\n<p>So, in this blog, we have tried to explain the concept of segment trees in most optimal way. If you want to practice more for interview, visit <a href=\"https:\/\/mycode.prepbytes.com\/interview-coding\/practice\">Interview Coding Practice<\/a>  which is curated by our expert mentors at PrepBytes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Concepts Used Segment Trees Difficulty Level Hard Problem Statement : Given an array of N unique elements and Q queries. In each query, we are given two values l,r. We want to know if there is a permutation of all the integers in this range such that in that permutation all the elements are consecutive. [&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":[124],"tags":[],"class_list":["post-2284","post","type-post","status-publish","format-standard","hentry","category-segment-tree-competitive-coding"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Consecutive Permutation | Segment Tree Competitive Coding | Prepbytes<\/title>\n<meta name=\"description\" content=\"Given an Array of N Unique Elements and Q Queries. In Each Query, We Are Given Two Values L,r. We Want to Know If There Is a Permutation of All the Integers in This Range.\" \/>\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\/consecutive-permutation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Consecutive Permutation | Segment Tree Competitive Coding | Prepbytes\" \/>\n<meta property=\"og:description\" content=\"Given an Array of N Unique Elements and Q Queries. In Each Query, We Are Given Two Values L,r. We Want to Know If There Is a Permutation of All the Integers in This Range.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/\" \/>\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-06-15T03:38:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-05-23T11:19:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097496695-Article_289.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=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/\"},\"author\":{\"name\":\"Prepbytes\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\"},\"headline\":\"Consecutive Permutation\",\"datePublished\":\"2020-06-15T03:38:19+00:00\",\"dateModified\":\"2022-05-23T11:19:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/\"},\"wordCount\":868,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097496695-Article_289.png\",\"articleSection\":[\"Segment Tree Competitive Coding\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/\",\"url\":\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/\",\"name\":\"Consecutive Permutation | Segment Tree Competitive Coding | Prepbytes\",\"isPartOf\":{\"@id\":\"http:\/\/43.205.93.38\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097496695-Article_289.png\",\"datePublished\":\"2020-06-15T03:38:19+00:00\",\"dateModified\":\"2022-05-23T11:19:56+00:00\",\"description\":\"Given an Array of N Unique Elements and Q Queries. In Each Query, We Are Given Two Values L,r. We Want to Know If There Is a Permutation of All the Integers in This Range.\",\"breadcrumb\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#primaryimage\",\"url\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097496695-Article_289.png\",\"contentUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097496695-Article_289.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/43.205.93.38\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Segment Tree Competitive Coding\",\"item\":\"https:\/\/prepbytes.com\/blog\/category\/segment-tree-competitive-coding\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Consecutive Permutation\"}]},{\"@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":"Consecutive Permutation | Segment Tree Competitive Coding | Prepbytes","description":"Given an Array of N Unique Elements and Q Queries. In Each Query, We Are Given Two Values L,r. We Want to Know If There Is a Permutation of All the Integers in This Range.","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\/consecutive-permutation\/","og_locale":"en_US","og_type":"article","og_title":"Consecutive Permutation | Segment Tree Competitive Coding | Prepbytes","og_description":"Given an Array of N Unique Elements and Q Queries. In Each Query, We Are Given Two Values L,r. We Want to Know If There Is a Permutation of All the Integers in This Range.","og_url":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/","og_site_name":"PrepBytes Blog","article_publisher":"https:\/\/www.facebook.com\/prepbytes0211\/","article_published_time":"2020-06-15T03:38:19+00:00","article_modified_time":"2022-05-23T11:19:56+00:00","og_image":[{"url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097496695-Article_289.png","type":"","width":"","height":""}],"author":"Prepbytes","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Prepbytes","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#article","isPartOf":{"@id":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/"},"author":{"name":"Prepbytes","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e"},"headline":"Consecutive Permutation","datePublished":"2020-06-15T03:38:19+00:00","dateModified":"2022-05-23T11:19:56+00:00","mainEntityOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/"},"wordCount":868,"commentCount":0,"publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097496695-Article_289.png","articleSection":["Segment Tree Competitive Coding"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/","url":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/","name":"Consecutive Permutation | Segment Tree Competitive Coding | Prepbytes","isPartOf":{"@id":"http:\/\/43.205.93.38\/#website"},"primaryImageOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#primaryimage"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097496695-Article_289.png","datePublished":"2020-06-15T03:38:19+00:00","dateModified":"2022-05-23T11:19:56+00:00","description":"Given an Array of N Unique Elements and Q Queries. In Each Query, We Are Given Two Values L,r. We Want to Know If There Is a Permutation of All the Integers in This Range.","breadcrumb":{"@id":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/prepbytes.com\/blog\/consecutive-permutation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#primaryimage","url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097496695-Article_289.png","contentUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645097496695-Article_289.png"},{"@type":"BreadcrumbList","@id":"https:\/\/prepbytes.com\/blog\/consecutive-permutation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/43.205.93.38\/"},{"@type":"ListItem","position":2,"name":"Segment Tree Competitive Coding","item":"https:\/\/prepbytes.com\/blog\/category\/segment-tree-competitive-coding\/"},{"@type":"ListItem","position":3,"name":"Consecutive Permutation"}]},{"@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\/2284","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=2284"}],"version-history":[{"count":11,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/2284\/revisions"}],"predecessor-version":[{"id":8106,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/2284\/revisions\/8106"}],"wp:attachment":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/media?parent=2284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/categories?post=2284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/tags?post=2284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}