{"id":1965,"date":"2020-07-01T09:47:01","date_gmt":"2020-07-01T09:47:01","guid":{"rendered":"https:\/\/blog.prepbytes.com\/?p=1965"},"modified":"2022-03-29T10:00:50","modified_gmt":"2022-03-29T10:00:50","slug":"max-rectangle","status":"publish","type":"post","link":"https:\/\/prepbytes.com\/blog\/max-rectangle\/","title":{"rendered":"Max Rectangle"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527793524-Article_387.png\" alt=\"\" \/><\/p>\n<h3>Concepts Used:<\/h3>\n<blockquote>\n<p>DP\/recursion and Stack.<\/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 a 2D binary matrix filled with 0\u2019s and 1\u2019s, find the largest rectangle containing all ones and print its area.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/mycode.prepbytes.com\/problems\/stacks\/MAXRECTANGLE\" title=\"Go to mycode.prepbytes.com\" target=\"_blank\" rel=\"noopener noreferrer\"><u><strong><\/strong><\/u><\/a><\/p>\n<h4>Test Case:<\/h4>\n<pre><code>Input:\n1\n5 5\n0 0 1 0 1\n0 1 1 1 1\n1 1 1 1 1\n1 1 1 1 1\n0 0 1 1 1\n\nOutput:\n12\n\nExplanation:\nThe inner matrix from index (1,1) to index (3,4) with area 12(3*4) gives the appropriate solution.<\/code><\/pre>\n<h3>Solving Approach:<\/h3>\n<blockquote>\n<p>The idea is to update each column of a given row with corresponding column of previous row and find largest histogram area for for that row.<\/p>\n<\/blockquote>\n<p><code>Steps:<\/code><\/p>\n<blockquote>\n<ol>\n<li>Find maximum area for row[0]<\/li>\n<li>for each row in 1 to N &#8211; 1\n<pre><code>for each column in that row\nif A[row][column] == 1 then update A[row][column] with A[row][column] += A[row - 1][column]\nfind area for that row\nand update maximum area so far<\/code><\/pre>\n<\/li>\n<\/ol>\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_1966 {\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_1966 .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_1966 .wpsm_nav-tabs {\r\n    border-bottom: 0px solid #ddd;\r\n}\r\n#tab_container_1966 .wpsm_nav-tabs > li.active > a, #tab_container_1966 .wpsm_nav-tabs > li.active > a:hover, #tab_container_1966 .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_1966 .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_1966 .wpsm_nav-tabs > li > a:focus {\r\noutline: 0px !important;\r\n}\r\n\r\n#tab_container_1966 .wpsm_nav-tabs > li > a:before {\r\n\tdisplay:none !important;\r\n}\r\n#tab_container_1966 .wpsm_nav-tabs > li > a:after {\r\n\tdisplay:none !important ;\r\n}\r\n#tab_container_1966 .wpsm_nav-tabs > li{\r\npadding:0px !important ;\r\nmargin:0px;\r\n}\r\n\r\n#tab_container_1966 .wpsm_nav-tabs > li > a:hover , #tab_container_1966 .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_1966 .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_1966 .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_1966 .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_1966 .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_1966 .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_1966 .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_1966 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_1966 .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_1966 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_1966 .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_1966 .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_1966\" >\r\n\t \r\n\t\t\t\t\t<ul class=\"wpsm_nav wpsm_nav-tabs\" role=\"tablist\" id=\"myTab_1966\">\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_1966_1\" aria-controls=\"tabs_desc_1966_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_1966_2\" aria-controls=\"tabs_desc_1966_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_1966_3\" aria-controls=\"tabs_desc_1966_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\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_1966_4\" aria-controls=\"tabs_desc_1966_4\" 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>Python<\/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_1966\">\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_1966_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\r\n#include <stdio.h>\r\n#include <limits.h>\r\n \r\n\/\/ `M \u00d7 N` matrix\r\n#define M 4\r\n#define N 5\r\n \r\n\/\/ Utility function to replace all non-zero values in a matrix by 1\r\nvoid resetMatrix(int mat[][N])\r\n{\r\n    for (int i = 0; i < M; i++)\r\n    {\r\n        for (int j = 0; j < N; j++)\r\n        {\r\n            if (mat[i][j] != 0) {\r\n                mat[i][j] = 1;\r\n            }\r\n        }\r\n    }\r\n}\r\n \r\n\/\/ Utility function to find the maximum of two numbers\r\nint max(int x, int y) {\r\n    return (x > y) ? x : y;\r\n}\r\n \r\n\/\/ Function to calculate the area of the largest rectangle of 1's where swapping of\r\n\/\/ columns is allowed\r\nint findMaxRectArea(int mat[][N])\r\n{\r\n    \/\/ update the matrix to store the counts of consecutive 1's present in each column\r\n    for (int j = 0; j < N; j++)\r\n    {\r\n        \/\/ process each column from bottom to top\r\n        for (int i = M - 2; i >= 0; i--)\r\n        {\r\n            if (mat[i][j] == 1) {\r\n                mat[i][j] = mat[i+1][j] + 1;\r\n            }\r\n        }\r\n    }\r\n \r\n    \/\/ keep track of the largest rectangle of 1's found so far\r\n    int maxArea = 0;\r\n \r\n    \/\/ traverse each row in the modified matrix to find the maximum area\r\n    for (int i = 0; i < M; i++)\r\n    {\r\n        \/\/ create a count array for each row `i`\r\n        int count[M + 1] = { 0 };\r\n \r\n        \/\/ process row `i`\r\n        for (int j = 0; j < N; j++)\r\n        {\r\n            if (mat[i][j] > 0)\r\n            {\r\n                \/\/ increment value in the count array using the current element\r\n                \/\/ as an index\r\n                count[mat[i][j]] += 1;\r\n \r\n                \/\/ the area can be calculated by multiplying the current\r\n                \/\/ element `mat[i][j]` with the corresponding value\r\n                \/\/ in the count array `count[mat[i][j]]`\r\n \r\n                maxArea = max(maxArea, mat[i][j] * count[mat[i][j]]);\r\n            }\r\n        }\r\n    }\r\n \r\n    \/\/ reset matrix before returning\r\n    resetMatrix(mat);\r\n \r\n    return maxArea;\r\n}\r\n \r\nint main(void)\r\n{\r\n    int mat[M][N] =\r\n    {\r\n       {0, 0, 1, 0, 1},\r\n\t   {0, 1, 1, 1, 1},\r\n\t   {1, 1, 1, 1, 1},\r\n\t   {1, 1, 1, 1, 1},\r\n\t   {0, 0, 1, 1, 1}\r\n    };\r\n \r\n    printf(\"The area of the largest rectangle of 1's is %d\", findMaxRectArea(mat));\r\n \r\n    return 0;\r\n}\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\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_1966_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\n    using namespace std; \r\n    bool sortby(const pair<int, int>& a, \r\n            const pair<int, int>& b) \r\n    { \r\n    if (a.first != b.first) \r\n        return a.first < b.first; \r\n    return (a.second < b.second); \r\n    } \r\n    bool kOverlap(vector<pair<int, int> > pairs, int k) \r\n    { \r\n    vector<pair<int, int> > vec; \r\n    for (int i = 0; i < pairs.size(); i++) { \r\n\r\n        vec.push_back(make_pair( pairs[i].first, -1 )); \r\n        vec.push_back(make_pair( pairs[i].second, +1 )); \r\n    } \r\n    sort(vec.begin(), vec.end()); \r\n    stack<pair<int, int> > st; \r\n    for (int i = 0; i < vec.size(); i++) { \r\n        pair<int, int> cur = vec[i]; \r\n        if (cur.second == -1) { \r\n            st.push(cur); \r\n        } \r\n        else { \r\n            st.pop(); \r\n        } \r\n        if (st.size() >= k) { \r\n            return true; \r\n        } \r\n    } \r\n    return false; \r\n    } \r\n     int main()\r\n    {  \r\n    int t;\r\n    cin>>t;\r\n    while(t--)\r\n    {\r\n    int n,k;\r\n    cin>>n>>k;\r\n    vector<pair<int, int> > pairs; \r\n    int x,y;\r\n    for(int i=0;i<n;i++)\r\n    {\r\n        cin>>x>>y;\r\n        pairs.push_back(make_pair(x,y));\r\n    }\r\n    if(kOverlap(pairs,k))\r\n    cout<<\"Yes\"<<endl;\r\n    else\r\n    {\r\n        cout<<\"No\"<<endl;\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_1966_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 maxRectangle \r\n{\r\n\tstatic int maxHist(int R, int C, int row[])\r\n\t{\r\n\t\t\/* Create an empty stack. The stack holds indexes of\r\n           hist[] array\/ The bars stored in stack are always\r\n\t\t   in increasing order of their heights. *\/\r\n\t\tStack<Integer> result = new Stack<Integer>();\r\n\r\n\t\tint top_val; \r\n\r\n\t\tint max_area = 0; \r\n\r\n\t\tint area = 0; \r\n\r\n\t\t\/\/ Run through all bars of given histogram (or row)\r\n\t\tint i = 0;\r\n\t\twhile (i < C) \r\n        {\r\n\t\t\t\/\/ If this bar is higher than the bar on top\r\n\t\t\t\/\/ stack, push it to stack\r\n\t\t\tif (result.empty()\r\n\t\t\t\t|| row[result.peek()] <= row[i])\r\n\t\t\t\tresult.push(i++);\r\n\t\t\telse {\r\n\t\t\t\t\/* If this bar is lower than top of stack,\r\n\t\t\t\tthen calculate area of rectangle with\r\n\t\t\t\tstack top as the smallest (or minimum\r\n\t\t\t\theight) bar. 'i' is 'right index' for the\r\n\t\t\t\ttop and element before top in stack is\r\n\t\t\t\t'left index' *\/\r\n\t\t\t\ttop_val = row[result.peek()];\r\n\t\t\t\tresult.pop();\r\n\t\t\t\tarea = top_val * i;\r\n\r\n\t\t\t\tif (!result.empty())\r\n\t\t\t\t\tarea\r\n\t\t\t\t\t\t= top_val * (i - result.peek() - 1);\r\n\t\t\t\tmax_area = Math.max(area, max_area);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\/* Now pop the remaining bars from stack and\r\n\t\tcalculate area with every popped bar as the smallest bar *\/\r\n\t\twhile (!result.empty()) \r\n        {\r\n\t\t\ttop_val = row[result.peek()];\r\n\t\t\tresult.pop();\r\n\t\t\tarea = top_val * i;\r\n\t\t\tif (!result.empty())\r\n\t\t\t\tarea = top_val * (i - result.peek() - 1);\r\n\r\n\t\t\tmax_area = Math.max(area, max_area);\r\n\t\t}\r\n\t\treturn max_area;\r\n\t}\r\n\t\/\/ Returns area of the largest rectangle with all 1s in A[][]\r\n\tstatic int max(int R, int C, int A[][])\r\n\t{\r\n\t\t\/\/ Calculate area for first row and initialize it as result\r\n\t\tint result = maxHist(R, C, A[0]);\r\n\t\t\/* iterate over row to find maximum rectangular area\r\n\t\t considering each row as histogram *\/\r\n\t\tfor (int i = 1; i < R; i++) \r\n        {\r\n\t\t\tfor (int j = 0; j < C; j++)\r\n\r\n\t\t\t\t\/\/ if A[i][j] is 1 then add A[i -1][j]\r\n\t\t\t\tif (A[i][j] == 1)\r\n\t\t\t\t\tA[i][j] += A[i - 1][j];\r\n\t\t\t\/\/ Update result if area with current row (as\r\n\t\t\t\/\/ last row of rectangle) is more\r\n\t\t\tresult = Math.max(result, maxHist(R, C, A[i]));\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\tpublic static void main(String[] args)\r\n\t{\r\n\t\tint R = 4;\r\n\t\tint C = 4;\r\n\r\n\t\tint A[][] = {\r\n\t\t\t{ 0, 1, 1, 0 },\r\n\t\t\t{ 1, 1, 1, 1 },\r\n\t\t\t{ 1, 1, 1, 1 },\r\n\t\t\t{ 1, 1, 0, 0 },\r\n        };\r\n\t\tSystem.out.print(\"Area of maximum rectangle is \"+ max(R, C, A));\r\n\t}\r\n}\r\n\r\n\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\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_1966_4\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"Python\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"Python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\ndef sortby(a, b):\r\n\r\n    if (a[0] != b[0]):\r\n        return a[0] < b[0]\r\n\r\n    return (a[1] < b[1])\r\n\r\n\r\ndef kOverlap(pairs, k): \r\n     \r\n    vec = [] \r\n    for i in range(len(pairs)): \r\n\r\n        vec.append([ pairs[i][0], -1 ])\r\n        vec.append([ pairs[i][1], +1 ])\r\n\r\n    vec.sort()\r\n    st = [] \r\n    for i in range(len(vec)):\r\n\r\n        cur = vec[i] \r\n        \r\n        if (cur[1] == -1):\r\n            st.append(cur) \r\n        \r\n        else:\r\n            st.pop()\r\n\r\n        if (len(st) >= k): \r\n            return True \r\n\r\n    return False\r\n\r\n\r\nfor _ in range(int(input())):\r\n\r\n\tn, k =map(int,input().split())\r\n\tpairs = []\r\n\tfor i in range(n):\r\n\t\tpairs.append(list(map(int,input().split())))\r\n\r\n\tif kOverlap(pairs, k):\r\n\t\tprint(\"Yes\")\r\n\telse:\r\n\t\tprint(\"No\")\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\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_1966 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_1966 a\"),jQuery(\"#tab-content_1966\"));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;1967&quot;]<\/p>\n<p>This article tried to discuss the concept of <strong>Recursion, Stack<\/strong>. Hope this blog helps you understand and solve the problem. To practice more problems you can check out <a href=\"#\"><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Concepts Used: DP\/recursion and Stack. Difficulty Level: Hard. Problem Statement : Given a 2D binary matrix filled with 0\u2019s and 1\u2019s, find the largest rectangle containing all ones and print its area. Test Case: Input: 1 5 5 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 [&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":[127],"tags":[],"class_list":["post-1965","post","type-post","status-publish","format-standard","hentry","category-stacks"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Stacks | Max Rectangle | Prepbytes<\/title>\n<meta name=\"description\" content=\"The Idea Is to Update Each Column of a Given Row With Corresponding Column of Previous Row and Find Largest Histogram Area for for That Row.\" \/>\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\/max-rectangle\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stacks | Max Rectangle | Prepbytes\" \/>\n<meta property=\"og:description\" content=\"The Idea Is to Update Each Column of a Given Row With Corresponding Column of Previous Row and Find Largest Histogram Area for for That Row.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/prepbytes.com\/blog\/max-rectangle\/\" \/>\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-01T09:47:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-29T10:00:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527793524-Article_387.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=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/prepbytes.com\/blog\/max-rectangle\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/max-rectangle\/\"},\"author\":{\"name\":\"Prepbytes\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\"},\"headline\":\"Max Rectangle\",\"datePublished\":\"2020-07-01T09:47:01+00:00\",\"dateModified\":\"2022-03-29T10:00:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/max-rectangle\/\"},\"wordCount\":113,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/max-rectangle\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527793524-Article_387.png\",\"articleSection\":[\"Stacks\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/prepbytes.com\/blog\/max-rectangle\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/prepbytes.com\/blog\/max-rectangle\/\",\"url\":\"https:\/\/prepbytes.com\/blog\/max-rectangle\/\",\"name\":\"Stacks | Max Rectangle | Prepbytes\",\"isPartOf\":{\"@id\":\"http:\/\/43.205.93.38\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/max-rectangle\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/max-rectangle\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527793524-Article_387.png\",\"datePublished\":\"2020-07-01T09:47:01+00:00\",\"dateModified\":\"2022-03-29T10:00:50+00:00\",\"description\":\"The Idea Is to Update Each Column of a Given Row With Corresponding Column of Previous Row and Find Largest Histogram Area for for That Row.\",\"breadcrumb\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/max-rectangle\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/prepbytes.com\/blog\/max-rectangle\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prepbytes.com\/blog\/max-rectangle\/#primaryimage\",\"url\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527793524-Article_387.png\",\"contentUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527793524-Article_387.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/prepbytes.com\/blog\/max-rectangle\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/43.205.93.38\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Stacks\",\"item\":\"https:\/\/prepbytes.com\/blog\/category\/stacks\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Max Rectangle\"}]},{\"@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":"Stacks | Max Rectangle | Prepbytes","description":"The Idea Is to Update Each Column of a Given Row With Corresponding Column of Previous Row and Find Largest Histogram Area for for That Row.","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\/max-rectangle\/","og_locale":"en_US","og_type":"article","og_title":"Stacks | Max Rectangle | Prepbytes","og_description":"The Idea Is to Update Each Column of a Given Row With Corresponding Column of Previous Row and Find Largest Histogram Area for for That Row.","og_url":"https:\/\/prepbytes.com\/blog\/max-rectangle\/","og_site_name":"PrepBytes Blog","article_publisher":"https:\/\/www.facebook.com\/prepbytes0211\/","article_published_time":"2020-07-01T09:47:01+00:00","article_modified_time":"2022-03-29T10:00:50+00:00","og_image":[{"url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527793524-Article_387.png","type":"","width":"","height":""}],"author":"Prepbytes","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Prepbytes","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/prepbytes.com\/blog\/max-rectangle\/#article","isPartOf":{"@id":"https:\/\/prepbytes.com\/blog\/max-rectangle\/"},"author":{"name":"Prepbytes","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e"},"headline":"Max Rectangle","datePublished":"2020-07-01T09:47:01+00:00","dateModified":"2022-03-29T10:00:50+00:00","mainEntityOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/max-rectangle\/"},"wordCount":113,"commentCount":0,"publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/max-rectangle\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527793524-Article_387.png","articleSection":["Stacks"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/prepbytes.com\/blog\/max-rectangle\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/prepbytes.com\/blog\/max-rectangle\/","url":"https:\/\/prepbytes.com\/blog\/max-rectangle\/","name":"Stacks | Max Rectangle | Prepbytes","isPartOf":{"@id":"http:\/\/43.205.93.38\/#website"},"primaryImageOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/max-rectangle\/#primaryimage"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/max-rectangle\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527793524-Article_387.png","datePublished":"2020-07-01T09:47:01+00:00","dateModified":"2022-03-29T10:00:50+00:00","description":"The Idea Is to Update Each Column of a Given Row With Corresponding Column of Previous Row and Find Largest Histogram Area for for That Row.","breadcrumb":{"@id":"https:\/\/prepbytes.com\/blog\/max-rectangle\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/prepbytes.com\/blog\/max-rectangle\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prepbytes.com\/blog\/max-rectangle\/#primaryimage","url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527793524-Article_387.png","contentUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527793524-Article_387.png"},{"@type":"BreadcrumbList","@id":"https:\/\/prepbytes.com\/blog\/max-rectangle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/43.205.93.38\/"},{"@type":"ListItem","position":2,"name":"Stacks","item":"https:\/\/prepbytes.com\/blog\/category\/stacks\/"},{"@type":"ListItem","position":3,"name":"Max Rectangle"}]},{"@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\/1965","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=1965"}],"version-history":[{"count":8,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/1965\/revisions"}],"predecessor-version":[{"id":8344,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/1965\/revisions\/8344"}],"wp:attachment":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/media?parent=1965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/categories?post=1965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/tags?post=1965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}