{"id":273,"date":"2010-10-10T17:30:48","date_gmt":"2010-10-10T09:30:48","guid":{"rendered":"http:\/\/comzyh.tk\/blog\/?p=273"},"modified":"2015-10-24T16:45:30","modified_gmt":"2015-10-24T08:45:30","slug":"%e7%94%a8%e4%ba%8e%e6%b1%82%e5%8c%ba%e9%97%b4%e6%9c%80%e5%80%bcrmq%e9%97%ae%e9%a2%98%e7%9a%84o1%e7%ae%97%e6%b3%95-st%e7%ae%97%e6%b3%95","status":"publish","type":"post","link":"https:\/\/comzyh.com\/blog\/archives\/273\/","title":{"rendered":"\u7528\u4e8e\u6c42\u533a\u95f4\u6700\u503c(RMQ\u95ee\u9898)\u7684O(1)\u7b97\u6cd5&#8211;ST(\u7a00\u758f\u8868)\u7b97\u6cd5"},"content":{"rendered":"<h3>RMQ(range minimum\/maximum query)\u95ee\u9898<\/h3>\n<p>\u7ed9\u5b9a\u4e00\u7ec4\u6570\uff0c\u7ed9\u5b9a\u7ed9\u5b9a\u4e00\u4e2a\u533a\u95f4\uff0c\u6c42\u533a\u95f4\u6700\u503c\uff0c\u7b97\u6cd5\u5927\u81f4\u6709\u4ee5\u4e0b\u51e0\u79cd<\/p>\n<ol>\n<li>O(n)\u7b97\u6cd5,\u76f4\u63a5\u626b\u63cf\u4e00\u904d\u533a\u95f4,\u6c42\u6700\u503c.<br \/>\n<strong><span style=\"color: #ff0000;\">\u4f18\u70b9<\/span><\/strong>:\u7f16\u7a0b\u7b80\u5355,\u53ef\u52a8\u6001\u6c42\u89e3(\u6570\u7ec4\u53ef\u52a8\u6001\u66f4\u6539)<br \/>\n<strong>\u7f3a\u70b9<\/strong>:\u4e0d\u80fd\u5904\u7406\u5927\u91cf\u6570\u636e.<\/li>\n<li>\u4f7f\u7528\u7ebf\u6bb5\u6811,\u53ef\u4ee5\u4f18\u5316\u6210Log(N)<br \/>\n<span style=\"color: #ff0000;\"><strong>\u4f18\u70b9<\/strong><\/span>:\u65f6\u95f4\u590d\u6742\u5ea6\u4f4e,\u66f4\u6539\u64cd\u4f5c\u590d\u6742\u5ea6\u4f4e<br \/>\n<strong>\u7f3a\u70b9<\/strong>:\u7f16\u7a0b\u590d\u6742\u5ea6\u5927.<\/li>\n<li>\u9884\u5904\u7406O(N log N),\u67e5\u8be2<strong><span style=\"color: #ff0000;\">O(1)<\/span><\/strong>\u7684Sparse_Table(\u7a00\u758f\u8868)\u7b97\u6cd5<br \/>\n<span style=\"color: #ff0000;\"><strong>\u4f18\u70b9<\/strong>:\u7f16\u7a0b\u7b80\u5355,\u53ef\u52a8\u6001\u6c42\u89e3(\u6570\u7ec4\u53ef\u52a8\u6001\u66f4\u6539)<\/span><br \/>\n<strong>\u7f3a\u70b9<\/strong>:\u6ca1\u5565,\u57fa\u672c\u7b97\u6cd5\u4e0d\u80fd\u5904\u7406\u52a8\u6001\u66f4\u6539\uff0c\u6539\u8fdb\u540e\u53ef\u4ee5\u66f4\u6539(\u590d\u6742\u5ea6\u8c8c\u4f3c\u4e0d\u5c0f\uff0c\u5927\u4e8eLogN).<\/li>\n<li>\u5feb\u901f\u9009\u62e9\u6cd5 Quick Slect(\u6253\u9171\u6cb9\u7684,\u4e0d\u662fRMQ)\uff0c\u80fd\u5728O(N) (\u6211\u4f30\u7b97\u662f1.5N)\u7684\u65f6\u95f4\u5185\u5f97\u5230\u533a\u95f4\u7b2cK\u5927\/\u5c0f\u503c<\/li>\n<\/ol>\n<p>\u4e0b\u9762\u4e3b\u8981\u4ecb\u7ecdST\u7b97\u6cd5<br \/>\n<!--more--><\/p>\n<h4>Sparse_Table(\u7a00\u758f\u8868)\u7b97\u6cd5<\/h4>\n<figure id=\"attachment_275\" aria-describedby=\"caption-attachment-275\" style=\"width: 346px\" class=\"wp-caption alignright\"><a rel=\"attachment wp-att-275\" href=\"\/\/comzyh.com\/blog\/archives\/273\/rmq1\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"275\" data-permalink=\"https:\/\/comzyh.com\/blog\/archives\/273\/rmq1\/\" data-orig-file=\"https:\/\/i0.wp.com\/comzyh.com\/upload\/wordpress\/\/2010\/10\/RMQ1.png?fit=%2C&amp;ssl=1\" data-orig-size=\"\" data-comments-opened=\"1\" data-image-meta=\"[]\" data-image-title=\"RMQ1\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/comzyh.com\/upload\/wordpress\/\/2010\/10\/RMQ1.png?fit=700%2C1024&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/comzyh.com\/upload\/wordpress\/\/2010\/10\/RMQ1.png?fit=2560%2C2560&amp;ssl=1\" class=\"size-full wp-image-275 \" title=\"ST\u7b97\u6cd5\u7684\u533a\u95f4\u5206\u5272\" src=\"https:\/\/i0.wp.com\/comzyh.com\/upload\/wordpress\/\/\/\/\/2010\/10\/RMQ1.png?resize=346%2C144\" alt=\"ST\u7b97\u6cd5\u7684\u533a\u95f4\u5206\u5272\" width=\"346\" height=\"144\" data-recalc-dims=\"1\" \/><\/a><figcaption id=\"caption-attachment-275\" class=\"wp-caption-text\">ST\u7b97\u6cd5\u7684\u533a\u95f4\u5206\u5272<\/figcaption><\/figure>\n<p>ST\u7b97\u6cd5\u4e3b\u8981\u662f\u5e94\u7528\u4e86\u5206\u6cbb\u548c\u52a8\u6001\u89c4\u5212\u7684\u65b9\u6cd5<\/p>\n<p>\u5c06\u6574\u4e2a\u533a\u95f4\u6309\u5982\u4e0b\u65b9\u5f0f\u5206\u5272<\/p>\n<p><strong>f[i][j]\u4ee3\u8868<\/strong>\u4ecei\u5f00\u59cb\u957f\u5ea6\u4e3a\\(2^{j}\\)\u7684\u4e00\u6bb5\u533a\u95f4(\u5373\\([i,i+2^{j}-1]\\))\u4e2d\u6700\u5927\/\u5c0f\u7684\u503c<\/p>\n<p>\u4f8b\u5982:\u5bf9\u4e8e\u56fe\u4e2d\u7684\u533a\u95f4[1,8],\u5176\u6700\u503c\u4e3a\u533a\u95f4[1,4]\u548c[5,8]\u4e2d\u66f4\u4f18(\u6700\u5927\u6216\u6700\u5c0f)\u7684\u90a3\u4e00\u4e2a<\/p>\n<p>\u663e\u7136f[i][j]\u7684\u503c\u662f\\([i,i+2^{j}-1]\\)\u7684\u524d\u4e00\u534a(\\([i,i+2^{j-1}-1]\\))\u4e0e\u540e\u4e00\u534a(\\([i+2^{j-1},i+2^{j}-1]\\))\u7684\u6700\u503c\u4e2d\u66f4\u4f18\u7684\u90a3\u4e00\u4e2a\uff0c\u8fd9\u662f\u4e00\u79cd\u5206\u6cbb\u7b56\u7565\uff0c\u8fd9\u4fbf\u662f\u4e3a\u4ec0\u4e48ST\u7b97\u6cd5\u53ef\u4ee5\u505a\u5230NlogN;<\/p>\n<figure id=\"attachment_147\" aria-describedby=\"caption-attachment-147\" style=\"width: 400px\" class=\"wp-caption alignright\"><br \/>\n<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" width=\"400\" height=\"260\" codebase=\"http:\/\/download.macromedia.com\/pub\/shockwave\/cabs\/flash\/swflash.cab#version=6,0,40,0\"><param name=\"quality\" value=\"high\" \/><param name=\"SCALE\" value=\"exactfit\" \/><param name=\"src\" value=\"\/\/comzyh.com\/upload\/wordpress\/\/\/\/\/2010\/10\/RMQ.swf\" \/><\/object><br \/>\n<figcaption id=\"caption-attachment-147\" class=\"wp-caption-text\">ST\u52a8\u753b\u6f14\u793a<\/figcaption><\/figure>\n<p>\u53ef\u5f97\u51fa\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b(\u4ee5\u6700\u5927\u503c\u4e3a\u4f8b):<br \/>\n\\(f[i][j]=Max \\left\\{\\begin{array}{ll}f[i][j-1]\\\\f[i+2^{j-1}][j-1]\\end{array}\\right.\\)<br \/>\n\u663e\u7136\uff0c\u521d\u503cf[i][0]\u4e3a\u5f1fi\u4f4d\u7684\u503c\uff1b<br \/>\n\u9012\u63a8\u65b9\u5f0f:\u5148\u9012\u63a8j\u679a\u4e3e\u533a\u95f4\u957f\u5ea6\uff0c\u7136\u540e\u518d\u679a\u4e3e\u8d77\u59cb\u70b9\uff0c\u8d77\u59cb\u70b9+\u533a\u95f4\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc7\u603b\u533a\u95f4\u957f\u5ea6<br \/>\n\u8fd8\u7528\u4e0a\u56fe\u4e3e\u4f8b:<\/p>\n<p>f[1][3]=Max{f[1][2],f[5][2]}<br \/>\n\u5982\u53f3\u56fe\uff0c\u53ef\u4ee5\u770b\u5230ST\u7b97\u6cd5\u7684\u5206\u6cbb\u7b56\u7565\uff0c\u8fd8\u53ef\u4ee5\u770b\u51fa\u57fa\u672cST\u7b97\u6cd5\u662f\u4e00\u4e2a\u79bb\u7ebf\u7b97\u6cd5<\/p>\n<h5>\u5173\u4e8e\u52a8\u6001\u4fee\u6539\u7ef4\u62a4<\/h5>\n<p>\u52a8\u6001\u7ef4\u62a4\u7684\u65b9\u6cd5\u662f\u8fd9\u6837\u7684<\/p>\n<ol>\n<li>\u66f4\u65b0f[x][0]<\/li>\n<li>\u679a\u4e3e\u957f\u5ea6\uff0cj=1;2^j&lt;=N;j++;<\/li>\n<li>\u679a\u4e3e\u8d77\u59cb\u70b9\u4ece\u4ee5i\u4e3a\u6700\u540e\u4e00\u4e2a\u5143\u7d20\u7684\u533a\u95f4\u5230\u4ee5x\u4e3a\u521d\u59cb\u70b9\u7684\u533a\u95f4<\/li>\n<\/ol>\n<p>\u4ee3\u7801\u662f\u4e0b\u9762<a href=\"#Active_RMQ\">\u6298\u53e0\u7684\u90a3\u4e2a<\/a><\/p>\n<figure id=\"attachment_311\" aria-describedby=\"caption-attachment-311\" style=\"width: 282px\" class=\"wp-caption alignright\"><a rel=\"attachment wp-att-311\" href=\"\/\/comzyh.com\/blog\/archives\/273\/rmq_get\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"311\" data-permalink=\"https:\/\/comzyh.com\/blog\/archives\/273\/rmq_get\/\" data-orig-file=\"https:\/\/i0.wp.com\/comzyh.com\/upload\/wordpress\/\/2010\/10\/RMQ_get.png?fit=%2C&amp;ssl=1\" data-orig-size=\"\" data-comments-opened=\"1\" data-image-meta=\"[]\" data-image-title=\"ST_get\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;ST\u7b97\u6cd5\u53d6\u503c&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/i0.wp.com\/comzyh.com\/upload\/wordpress\/\/2010\/10\/RMQ_get.png?fit=700%2C1024&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/comzyh.com\/upload\/wordpress\/\/2010\/10\/RMQ_get.png?fit=2560%2C2560&amp;ssl=1\" class=\"size-full wp-image-311 \" title=\"ST_get\" src=\"https:\/\/i0.wp.com\/comzyh.com\/upload\/wordpress\/\/\/\/\/2010\/10\/RMQ_get.png?resize=282%2C191\" alt=\"ST\u67e5\u8be2\" width=\"282\" height=\"191\" data-recalc-dims=\"1\" \/><\/a><figcaption id=\"caption-attachment-311\" class=\"wp-caption-text\">ST\u7b97\u6cd5\u67e5\u8be2<\/figcaption><\/figure>\n<h5>ST\u7b97\u6cd5O(1)\u67e5\u8be2<\/h5>\n<p>\u627e\u5230\u4e24\u4e2a\u957f\u4e3a\\(2^{k}\\)\u533a\u95f4\uff0c\u533a\u95f4\u957f\u5ea6\u7684\u4e00\u534a\u2264\u957f\u5ea6\u2264\u533a\u95f4\u957f\u5ea6<br \/>\n\\(\\frac{{e &#8211; b}}{2} \\le 2^k  \\le e &#8211; b + 1\\) (b\u662f\u8981\u67e5\u8be2\u7684\u533a\u95f4\u7684\u8d77\u70b9,e\u662f\u8981\u67e5\u8be2\u7684\u533a\u95f4\u7684\u7ec8\u70b9)<br \/>\n\u8fd9\u4e24\u4e2a\u533a\u95f4\u80fd\u5b8c\u5168\u4e14\u7684\u8986\u76d6\u76ee\u6807\u533a\u95f4\u4e14\u4e0d\u591a\u8986\u76d6\uff0c\u6613\u8bc1\u8fd9\u4e24\u4e2a\u533a\u95f4\u6700\u503c\u7684\u6700\u503c\u5373\u4e3a\u6240\u6c42\u6700\u503c<br \/>\n\u7406\u60f3\u7684\u533a\u95f4\u957f\u5ea6\u4e3a\\(log {}_2(e &#8211; b)\\)<\/p>\n<p>\u4e0b\u9762\u770b\u4ee3\u7801\uff1a<br \/>\n\u8f93\u5165\u683c\u5f0f\uff1a<br \/>\nN\uff1a\u533a\u95f4\u957f\u5ea6<br \/>\nN\u4e2a\u6570\uff1a\u4ee3\u8868\u5143\u7d20<br \/>\nM\uff1a\u67e5\u8be2\u4e2a\u6570<br \/>\nM\u4e2a\u6570\u5bf9f,t,\u8868\u660e\u533a\u95f4\u8303\u56f4[f,t]<br \/>\n\u6837\u4f8b\uff1a<\/p>\n<pre lang=\"text\" colla=\"-\">\r\ninput:\r\n9\r\n1 2 3 5 6 4 8 9 2\r\n5\r\n1 9\r\n1 8\r\n1 4\r\n3 5\r\n4 7\r\noutput:\r\n9\r\n9\r\n5\r\n6\r\n8<\/pre>\n<p>\u7a0d\u52a0\u4fee\u6539\u53ef\u4ee5\u53bb<a href=\"http:\/\/www.tyvj.cn:8080\/Problem_Show.asp?id=1038\" target=\"_blank\" class=\"broken_link\">TYVJ 1038<\/a>\u6d4b\u8bd5<\/p>\n<pre lang=\"cpp\">#include <iostream>\r\n#include <math.h>\r\n#include <stdlib.h>\r\nusing namespace std;\r\nint f[1000][12];\/\/\u52a8\u89c4\u6570\u7ec4 \r\nint N,M; \r\ninline void build();\/\/\u9884\u5904\u7406ST\u7b97\u6cd5\u6570\u7ec4 \r\ninline int get(int b,int e);\r\nint main(){\r\n    int i,b,e;\r\n    cin >> N;\r\n    for (i=1;i<=N;i++)\r\n        cin >> f[i][0];\r\n    build();\r\n    \/*\r\n    \/\/\u6253\u5370\u52a8\u89c4\u6570\u7ec4 \r\n    int j;\r\n    for (i=1;i<=N;i++){\r\n        for (j=0;j<=(int)log2(N);j++)\r\n            printf(\"%4d \",f[i][j]);\r\n        cout << endl;\r\n        }\r\n    *\/\r\n    cin >> M;\r\n    for (i=1;i<=M;i++) {\r\n        cin >> b >> e;\r\n        cout << get(b,e)<< endl;\r\n        }\r\n    system(\"pause\");\r\n    }\r\ninline void build(){\r\n       int i,j,\r\n           \/*l=(int)log2(N)*\/;\r\n       for (j=1;(1<<j)<=N;j++)\/\/\u533a\u57df\u5927\u5c0f(2^j)\u6ca1\u5fc5\u8981\u8d85\u8fc7\u6574\u4e2a\u533a\u95f4 \r\n           for (i=1;i+(1<<j)-1<=N;i++)\r\n               f[i][j]=f[i][j-1] >? f[i+ (1<<(j-1)) ][j-1];\r\n       }\r\ninline int get(int b,int e){\r\n       int j=(int)log2(e - b+1);\/\/\u533a\u57df\u957f\u5ea6\u7684j,\u4f7f\u5f97(2^j)\u5927\u4e8e\u7b49\u4e8e\u8bf7\u6c42\u533a\u95f4\u7684\u4e00\u534a\u5373\u53ef\r\n       return f[b][j] >? f[e-(1<<j)+1][j];\/\/f[e-(1<<j)+1][j] \u8868\u793a\u4ee5e\u4e3a\u4e2d\u70b9\u957f\u4e3a2^j\u7684\u533a\u95f4 \r\n       }\r\n<\/pre>\n<p><strong>\u52a8\u6001\u4ee3\u7801<\/strong>\uff0cM\u4e2a\u8bf7\u6c42\u6709\u53d8\uff0cc,a,b;c=1\u4ee3\u8868\u5c06\u7b2ca\u4f4d\u6539\u4e3ab\uff0ca=0\u4ee3\u8868\u67e5\u8be2[a,b];<br \/>\n\u6837\u4f8b\uff1a<\/p>\n<pre lang=\"text\" colla=\"-\">\r\ninput:\r\n9\r\n1 2 3 5 6 4 8 9 2\r\n10\r\n0 1 9\r\n1 1 8\r\n0 1 4\r\n1 3 5\r\n1 4 7\r\n0 1 5\r\n1 5 10\r\n0 1 5\r\n1 3 12\r\n0 2 4\r\noutput:\r\n9\r\n8\r\n8\r\n10\r\n12<\/pre>\n<p><a name=\"Active_RMQ\" id=\"Active_RMQ\"><\/a>\u52a8\u6001RMQ\u4ee3\u7801<\/p>\n<pre lang=\"cpp\" colla=\"-\">\r\n#include <iostream>\r\n#include <math.h>\r\n#include <stdlib.h>\r\nusing namespace std;\r\nint f[1000][12];\/\/\u52a8\u89c4\u6570\u7ec4 \r\nint N,M; \/\/N:\u533a\u95f4\u5927\u5c0f\uff0cM:\u6570\u636e\u4e2a\u6570 \r\ninline void build();\/\/\u9884\u5904\u7406ST\u7b97\u6cd5\u6570\u7ec4 \r\ninline int get(int b,int e);\/\/\u53d6\u5f97\u6700\u5927\u503c\r\ninline void set(int x,int y);\/\/\u5c06y\u653e\u7f6e\u5728x\u5904\u5e76\u66f4\u65b0 \r\nint main(){\r\n    int i,b,e,p;\r\n    cin >> N ;\r\n    for (i=1;i<=N;i++)\r\n        cin >> f[i][0];\r\n    build();\r\n    \/*\r\n    \/\/\u6253\u5370\u52a8\u89c4\u6570\u7ec4 \r\n    int j;\r\n    for (i=1;i<=N;i++){\r\n        for (j=0;j<=(int)log2(N);j++)\r\n            printf(\"%4d \",f[i][j]);\r\n        cout << endl;\r\n        }\r\n    *\/\r\n    cin >> M;\r\n    int c; \r\n    for (i=1;i<=M;i++) {\r\n        cin >> c;\r\n        if (c==1){\/\/\u4fee\u6539 \r\n           cin >> b >> p; \r\n           set(b,p);\r\n           }\r\n        else {\/\/\u67e5\u8be2 \r\n        cin >> b >> e;\r\n        cout << get(b,e)<< endl;\r\n        }\r\n        }\r\n    system(\"pause\");\r\n    }\r\ninline void build(){\r\n       int i,j,\r\n           \/*l=(int)log2(N)*\/;\r\n       for (j=1;(1<<j)<=N;j++)\/\/\u533a\u57df\u5927\u5c0f(2^j)\u6ca1\u5fc5\u8981\u8d85\u8fc7\u6574\u4e2a\u533a\u95f4 \r\n           for (i=1;i+(1<<j)-1<=N;i++)\r\n               f[i][j]=f[i][j-1] >? f[i+ (1<<(j-1)) ][j-1];\r\n       }\r\ninline int get(int b,int e){\r\n       int j=(int)log2(e - b+1);\/\/\u533a\u57df\u957f\u5ea6\u7684j,\u4f7f\u5f97(2^j)\u5927\u4e8e\u7b49\u4e8e\u8bf7\u6c42\u533a\u95f4\u7684\u4e00\u534a\u5373\u53ef\r\n       return f[b][j] >? f[e-(1<<j)+1][j];\/\/f[e-(1<<j)+1][j] \u8868\u793a\u4ee5e\u4e3a\u4e2d\u70b9\u957f\u4e3a2^j\u7684\u533a\u95f4 \r\n       }\r\ninline void set(int x,int y){\/\/\u5c06y\u653e\u7f6e\u5728x\u5904\u5e76\u66f4\u65b0                 \r\n       int i,j;\r\n       f[x][0]=y;\r\n       for (j=1;(1<<j)<=N;j++)\r\n           for (i=x-(1<<j)+1 >? 1;i<=x &#038;&#038; i+(1<<j)-1<=N;i++ )\r\n           \/\/\u5e94\u4ece\u6700\u65e9\u5305\u542bx\u4f4d\u7684\u4e00\u4f4d\u5f00\u59cb\u5faa\u73af\uff0c\u5373x-(1<<j)+1\uff0c\u4f46\u6709\u53ef\u80fd\u4e3a\u8d1f\u6570 \r\n                  f[i][j]=f[i][j-1] >? f[i+ (1<<(j-1)) ][j-1];\r\n       }\r\n<\/pre>\n<h4>\u4e8c\u7ef4ST \u7b97\u6cd5<\/h4>\n<p>f[x][y][i][j]\u8868\u793a\u4ece\u70b9(x,y)\u5f00\u59cbx\u8f74\u957f\u4e3a\\(2^{i}\\),y\u8f74\u957f\u4e3a\\(2^{j}\\)\u7684\u4e00\u4e2a\u77e9\u5f62<\/p>\n<p>\u5982\u56fe\u6240\u793a\uff1a<\/p>\n<figure id=\"attachment_424\" aria-describedby=\"caption-attachment-424\" style=\"width: 396px\" class=\"wp-caption aligncenter\"><a rel=\"attachment wp-att-364\" href=\"\/\/comzyh.com\/blog\/?attachment_id=424\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-364 \" title=\"\u4e8c\u7ef4ST\u7b97\u6cd5\" src=\"https:\/\/i0.wp.com\/comzyh.com\/upload\/wordpress\/\/\/\/\/2010\/10\/St2.png?resize=396%2C252\" alt=\"\" width=\"396\" height=\"252\" data-recalc-dims=\"1\" \/><\/a><figcaption id=\"caption-attachment-424\" class=\"wp-caption-text\">\u4e8c\u7ef4ST\u7b97\u6cd5<\/figcaption><\/figure>\n<p>\u5176\u52a8\u89c4\u8f6c\u79fb\u65b9\u7a0b\u4e3a<\/p>\n<p style=\"text-align: center;\">\n\\(f[x][y][i][j] = \\left\\{ {\\begin{array}{ll}{\\max \\left\\{ {\\begin{array}{ll}{f[x][y][i][j - 1]}  \\\\{f[x][y + 2^{j - 1} ][i][j - 1]}  \\\\\\end{array}} \\right.}  & i=0\\\\{\\max \\left\\{ \\begin{array}{ll}f[x][y][i - 1][j] \\\\f[x + 2^{i - 1} ][y]i - 1][j] \\\\\\end{array} \\right.} & i\\ne 0 \\\\\\end{array}} \\right.\\)\n<\/p>\n<p>\n<strong> \u89e3\u91ca\uff1a<\/strong><br \/>\n\u6bcf\u6b21DP\uff0c\u82e5\u662f\u5355\u884c(i=0)\uff0c\u5219\u6309\u4e00\u7ef4\u65b9\u5f0fDP<br \/>\n\u82e5\u4e0d\u662f\uff0c\u5c06\u76ee\u6807\u533a\u57df\u5206\u5272\u4e3a\u4e0a\u4e0b\u4e24\u90e8\u5206(\u9ec4\uff0c\u7eff)\uff0c\u53d6\u5176\u6700\u503c\u5373\u53ef<br \/>\n\u6211\u81ea\u5df1\u60f3\u7684DP\u548c\u5927\u90e8\u5206\u4eba\u7684\u4e0d\u4e00\u6837\uff0cDP\u65f6\u5c06\u76ee\u6807\u533a\u57df\u5341\u5b57\u5747\u5206\u4e3a4\u4efd\u6c42\u6700\u503c(\u548c\u4e0b\u9762\u7684\u67e5\u8be2\u5dee\u4e0d\u591a)\u800c\u4e14\u4ee3\u7801\u957f\uff0c\u6548\u7387\u53ef\u80fd\u4e5f\u4f4e\uff0c\u8d34\u5728\u540e\u9762\u3002<br \/>\n\u67e5\u8be2\u65f6\uff0c\u5c06\u76ee\u6807\u533a\u57df\u5341\u5b57\u5e73\u5206\u4e3a4\u4efd\uff0c\u53d6\u5176\u6700\u503c<br \/>\n\u5e16\u4ee3\u7801:\n<\/p>\n<pre lang=\"Cpp\" colla=\"+\">\r\n#include <iostream>\r\n#include <math.h>\r\n#include <stdlib.h>\r\n#define max(x,y) (x)>(y)?(x):(y)\r\nusing namespace std;\r\nint f[300][300][11][11];\/\/x,y,\u9ad8\uff0c\u5bbd \r\nint R,C,M;\r\ninline void build();\r\ninline void build2();\/\/Comzyh\u5199\u7684 \r\ninline int get (int x1,int y1,int x2,int y2);\r\nint main(){\r\n    int i,j;\r\n    cin >> R >> C;\r\n    for (i=1;i<=R;i++)\r\n        for (j=1;j<=C;j++)\r\n            cin >> f[i][j][0][0];\r\n    build();\r\n    cout << \"Please enter M ...\" << endl;\r\n    cin >> M;\r\n    int x1,y1,x2,y2;\r\n    for (i=1;i<=M;i++){\r\n        cin  >> x1 >> y1 >> x2 >> y2;\r\n        cout << get (x1,y1,x2,y2)  << endl;\r\n        }\r\n        \r\n    system(\"pause\");\r\n\r\n    }s\r\ninline void build (){\r\n       int i,j,x,y;\r\n       for (i=0;(1<<i)<=R;i++)\/\/\u5faa\u73af\u9ad8\u5ea6 \r\n           for (j=0;(1<<j)<=C;j++)\/\/\u5faa\u73af\u5bbd\u5ea6 \r\n               if (i!=0 || j !=0) \r\n       for (x=1;x+(1<<i)-1<=R;x++)\/\/\u5faa\u73af\u7eb5\u5750\u6807\r\n           for (y=1;y+(1<<j)-1<=C;y++)\/\/\u5faa\u73af\u6a2a\u5750\u6807 \r\n               if (i==0)\r\n                  f[x][y][i][j] = f[x][y         ][i][j-1] >?\r\n                                  f[x][y+(1<<j-1)][i][j-1];\r\n               else \r\n                  f[x][y][i][j] = f[x         ][y][i-1][j] >?\r\n                                  f[x+(1<<i-1)][y][i-1][j];                 \r\n               \r\n       }\r\ninline int get (int x1,int y1,int x2,int y2){\r\n       int lx= (int)log2(x2 - x1 + 1),\r\n           ly= (int)log2(y2 - y1 + 1);\r\n       return ( f[x1          ][y1            ][lx][ly] >?\r\n                f[x1          ][y2 - (1<<ly)+1][lx][ly])>?\r\n              ( f[x2-(1<<lx)+1][y1            ][lx][ly] >?\r\n                f[x2-(1<<lx)+1][y2 - (1<<ly)+1][lx][ly]);\r\n       }\r\n<\/pre>\n<p>\u6211\u7684Build\u51fd\u6570,\u4e00\u5f00\u59cb\u8981\u5148\u4e00\u7ef4DP f[x][y][i][0]\u548cf[x][y][0][j],\u8c8c\u4f3c\u4e0d\u548b\u597d,\u732e\u4e11 <\/p>\n<pre lang=\"Cpp\" colla=\"-\"> \r\ninline void build2(){\/\/Comzyh\u7684\u521d\u59cb\u5316\uff0c\u6548\u7387\u4e0d\u9ad8 \uff0c\u732e\u4e11 \r\n       int i,j,x,y;\r\n       \/\/\u521d\u59cb\u5316f[x][y][0][j]; \r\n       for (j=1;(1<<j)<=C;j++)\/\/\u5faa\u73af\u5bbd\u5ea6z\r\n           for (x=1;x<=R;x++)\/\/\u5faa\u73af\u7eb5\u5750\u6807\r\n               for (y=1;y+(1<<j)-1<=C;y++)\/\/\u5faa\u73af\u6a2a\u5750\u6807 \r\n                   f[x][y][0][j]=f[x][y][0][j-1] >? f[x][y+(1<<(j-1))][0][j-1];  \r\n       \/\/\u521d\u59cb\u5316f[x][y][i][0]; \r\n       for (i=1;(1<<i)<=R;i++)\/\/\u5faa\u73af\u9ad8\u5ea6\r\n           for (x=1;x+(1<<i)-1<=R;x++)\/\/\u5faa\u73af\u7eb5\u5750\u6807\r\n               for (y=1;y<=C;y++)\/\/\u5faa\u73af\u6a2a\u5750\u6807 \r\n                   f[x][y][i][0]=f[x][y][i-1][0] >? f[x+(1<<(i-1))][y][i-1][0];\r\n       \/\/DP\r\n       for (i=1;(1<<i)<=R;i++)\/\/\u5faa\u73af\u9ad8\u5ea6 \r\n           for (j=1;(1<<j)<=C;j++)\/\/\u5faa\u73af\u5bbd\u5ea6 \r\n               if (i!=0 || j!=0)\r\n               for (x=1;x+(1<<i)-1<=R;x++)\/\/\u5faa\u73af\u7eb5\u5750\u6807\r\n                   for (y=1;y+(1<<j)-1<=C;y++)\/\/\u5faa\u73af\u6a2a\u5750\u6807 \r\n                        f[x][y][i][j] = ( f[x         ][y         ][i-1][j-1] >?\r\n                                          f[x+(1<<i-1)][y         ][i-1][j-1])>?\r\n                                        ( f[x         ][y+(1<<j-1)][i-1][j-1] >?\r\n                                          f[x+(1<<i-1)][y+(1<<j-1)][i-1][j-1] \r\n                                        );\r\n       \r\n       }\r\n<\/pre>\n<p>\u5c0f\u7ed9\u4e00\u7ec4\u81ea\u521b\u6d4b\u8bd5\u6570\u636e,\u633a\u5f3a\u7684\u3002<br \/>\n\u683c\u5f0f:<br \/>\n\u884c\u6570,\u5217\u6570()<br \/>\n\u77e9\u9635<br \/>\n\u8bf7\u6c42\u6b21\u6570M<br \/>\nM\u884c\uff0cX1,X2,Y1,Y2<\/p>\n<pre lang=\"text\" colla=\"-\">\r\nInput\uff1a\r\n10 10\r\n1\t2\t3\t4\t5\t6\t7\t8\t9\t10\r\n10\t9\t8\t7\t6\t5\t4\t3\t2\t1\r\n1\t6\t4\t23\t8\t41\t25\t41\t3\t4\r\n5\t4\t85\t1\t2\t1\t5\t1\t32\t2\r\n4\t52\t1\t5\t5\t2\t3\t1\t5\t5\r\n0\t0\t0\t0\t0\t0\t0\t0\t0\t0\r\n1\t63\t1\t3\t14\t5\t10\t0\t0\t1\r\n5\t6\t1\t9\t1\t0\t1\t6\t1\t1\r\n1\t1\t1\t1\t1\t1\t1\t1\t1\t1\r\n1\t1\t1\t1\t1\t1\t1\t1\t1\t1\r\n6\r\n1 1 10 10\r\n1 9 10 10\r\n1 1  5   2 \r\n6 6 10 10\r\n9 9 10 10\r\n6 5  8   7 \r\n\r\n\u7b54\u6848\u5c31\u4e0d\u7ed9\u4e86\r\n<\/pre>\n<p>\u6ce8\u610f\uff0c\">?\" \u662fC++\u4e2d\u8f83\u5927\u503c\u8fd0\u7b97\u7b26\uff0c\u7ed3\u679c\u4e3a\u7b26\u53f7\u5de6\u53f3\u8f83\u5927\u7684\u90a3\u4e2a\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>RMQ(range minimum\/maximum query)\u95ee\u9898 \u7ed9\u5b9a\u4e00\u7ec4\u6570\uff0c\u7ed9\u5b9a\u7ed9\u5b9a\u4e00\u4e2a\u533a\u95f4\uff0c\u6c42\u533a\u95f4\u6700\u503c [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[9],"tags":[22,43,41,42],"class_list":["post-273","post","type-post","status-publish","format-standard","hentry","category-9","tag-nlogn","tag-o1","tag-rmq","tag-42"],"jetpack_publicize_connections":[],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6XQWE-4p","jetpack-related-posts":[],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/comzyh.com\/blog\/wp-json\/wp\/v2\/posts\/273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/comzyh.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/comzyh.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/comzyh.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/comzyh.com\/blog\/wp-json\/wp\/v2\/comments?post=273"}],"version-history":[{"count":10,"href":"https:\/\/comzyh.com\/blog\/wp-json\/wp\/v2\/posts\/273\/revisions"}],"predecessor-version":[{"id":900,"href":"https:\/\/comzyh.com\/blog\/wp-json\/wp\/v2\/posts\/273\/revisions\/900"}],"wp:attachment":[{"href":"https:\/\/comzyh.com\/blog\/wp-json\/wp\/v2\/media?parent=273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/comzyh.com\/blog\/wp-json\/wp\/v2\/categories?post=273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/comzyh.com\/blog\/wp-json\/wp\/v2\/tags?post=273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}