{"id":317,"date":"2010-07-23T13:38:28","date_gmt":"2010-07-23T05:38:28","guid":{"rendered":"http:\/\/www.shuizilong.com\/house\/?p=317"},"modified":"2012-07-25T02:34:09","modified_gmt":"2012-07-24T18:34:09","slug":"mipt-105-rmq-problem","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/house\/archives\/mipt-105-rmq-problem\/","title":{"rendered":"MIPT 105. RMQ problem"},"content":{"rendered":"<h3>Brief description: <\/h3>\n<p>&#8230; RMQ \u6a21\u677f\u9898\u3002\u3002\uff08\u65e0\u4fee\u6539\u3002\u3002\u591a\u8be2\u95ee\u3002\u3002\u3002<\/p>\n<p><!--more--><\/p>\n<h3>Analysis: <\/h3>\n<p>&#8230; \uff08\u7ebf\u6bb5\u6811\u76f4\u63a5 T \u4e0d\u89e3\u91ca\u3002\u3002<\/p>\n<pre class=\"brush: cpp; collapse: true; first-line: 1; light: false; title: SparseTree.cpp; toolbar: true; notranslate\" title=\"SparseTree.cpp\">\r\n#include &lt;iostream&gt;\r\n#include &lt;cstdio&gt;\r\n#include &lt;cstring&gt;\r\n#include &lt;cmath&gt;\r\nusing namespace std;\r\ninline int _1(int x){return 1 &lt;&lt; x;}\r\ninline void RD(int &amp;x){scanf(&quot;%d&quot;, &amp;x);}\r\n\r\n\/*----*\/\r\n\r\nconst int L = 19, N = 250000;\r\n\r\nfloat ST&#x5B;L]&#x5B;N];\r\nint n, m, i, j, a, b, lv, up;\r\n\r\nint main(){\r\n\r\n    freopen(&quot;in.txt&quot;, &quot;r&quot;, stdin);\r\n\r\n    RD(n); for(i=0;i&lt;n;++i) scanf(&quot;%f&quot;, &amp;ST&#x5B;0]&#x5B;i]);\r\n\r\n    for (up = log2(n), lv = 1; lv &lt;= up; ++ lv)\r\n        for (i = 0; i &lt;= n - _1(lv); ++i)\r\n            ST&#x5B;lv]&#x5B;i] = min(ST&#x5B;lv - 1]&#x5B;i], ST&#x5B;lv - 1]&#x5B;i + _1(lv - 1)]);\r\n\r\n    RD(m); while (m--){\r\n        RD(a), RD(b), lv = log2(b - a);\r\n        printf(&quot;%.6f\\n&quot;, min(ST&#x5B;lv]&#x5B;a], ST&#x5B;lv]&#x5B;b - _1(lv)]));\r\n    }\r\n}\r\n\r\n<\/pre>\n<pre class=\"brush: cpp; collapse: true; first-line: 1; light: false; title: BinaryIndexTree.cpp; toolbar: true; notranslate\" title=\"BinaryIndexTree.cpp\"> \r\n#include &lt;iostream&gt;\r\n#include &lt;cstdio&gt;\r\n#include &lt;cstring&gt;\r\n#include &lt;cmath&gt;\r\nusing namespace std;\r\ntemplate&lt;class T&gt; inline void checkMin(T &amp;a,const T b){if (b&lt;a) a=b;}\r\ntemplate&lt;class T&gt; inline T low_bit(T x) {return x &amp; -x;}\r\ninline void RD(int &amp;x){scanf(&quot;%d&quot;, &amp;x);}\r\n\r\n\/*----*\/\r\n\r\nconst int N = 250001;\r\n\r\nfloat A&#x5B;N], C&#x5B;N], res;\r\nint n, m, i, j, a, b;\r\n\r\nint main(){\r\n\r\n    \/\/freopen(&quot;in.txt&quot;, &quot;r&quot;, stdin);\r\n\r\n    RD(n); for(i=1;i&lt;=n;++i) scanf(&quot;%f&quot;, &amp;A&#x5B;i]), C&#x5B;i] = A&#x5B;i];\r\n\r\n    for (i=1;i&lt;=n;++i)\r\n        for (j=1;j&lt;low_bit(i);j&lt;&lt;=1)\r\n            checkMin(C&#x5B;i], C&#x5B;i-j]);\r\n\r\n    RD(m); while (m--){\r\n        RD(a), RD(b), ++a, res = A&#x5B;b];\r\n        while (b!=a){\r\n            for (--b;b-a&gt;=low_bit(b);b-=low_bit(b)) checkMin(res, C&#x5B;b]);\r\n            checkMin(res, A&#x5B;b]);\r\n        }\r\n\r\n        printf(&quot;%.6f\\n&quot;, res);\r\n    }\r\n}\r\n\r\n<\/pre>\n<p>(\u6b63\u5e38\u5411\u3002\u3002\u3002<br \/>\n(2.10s +- \u3002\u3002<br \/>\n(3.35s +- \u3002\u3002\u3002<\/p>\n<pre class=\"brush: cpp; collapse: true; first-line: 1; light: false; title: SparseTree.cpp; toolbar: true; notranslate\" title=\"SparseTree.cpp\"> \r\n#include&lt;iostream&gt;\r\n#include&lt;cmath&gt;\r\nfloat a&#x5B;19]&#x5B;250000];\r\nint n,i,j,t;main(){\r\n    for(scanf(&quot;%d&quot;,&amp;n),i=0;i&lt;n;++i)scanf(&quot;%f&quot;,a&#x5B;0]+i);\r\n    for(t=log2(n),i=1;i&lt;=t;++i)for(j=0;j&lt;=n-(1&lt;&lt;i);++j)a&#x5B;i]&#x5B;j]=std::min(a&#x5B;i-1]&#x5B;j],a&#x5B;i-1]&#x5B;j+(1&lt;&lt;i-1)]);\r\n    for(scanf(&quot;%d&quot;,&amp;n);n--;)scanf(&quot;%d%d&quot;,&amp;i,&amp;j),t=log2(j-i),printf(&quot;%.6f\\n&quot;,std::min(a&#x5B;t]&#x5B;i],a&#x5B;t]&#x5B;j-(1&lt;&lt;t)]));\r\n}\r\n<\/pre>\n<pre class=\"brush: cpp; collapse: true; first-line: 1; light: false; title: BinaryIndexTree.cpp; toolbar: true; notranslate\" title=\"BinaryIndexTree.cpp\"> \r\n#include &lt;cstdio&gt;\r\n#define M(a,b) if (b&lt;a) a=b;\r\n#define B(x) (x&amp;-x)\r\nconst int N = 250001;\r\nfloat A&#x5B;N], C&#x5B;N], r;\r\nint n, i, j; main(){\r\n\r\n    for(scanf(&quot;%d&quot;, &amp;n), i=1;i&lt;=n;++i) scanf(&quot;%f&quot;, &amp;A&#x5B;i]), C&#x5B;i] = A&#x5B;i];\r\n    for (i=1;i&lt;=n;++i) for (j=1;j&lt;B(i);j&lt;&lt;=1) M(C&#x5B;i], C&#x5B;i-j]);\r\n\r\n    for(scanf(&quot;%d&quot;,&amp;n);n--;){\r\n        scanf(&quot;%d%d&quot;,&amp;i,&amp;j),++i,r=A&#x5B;j];\r\n        while (i!=j){\r\n            for (--j;j-i&gt;=B(j);j-=B(j)) M(r, C&#x5B;j]);\r\n            M(r, A&#x5B;j]);\r\n        }\r\n        printf(&quot;%.6f\\n&quot;,r);\r\n    }\r\n}\r\n\r\n<\/pre>\n<p>( \u9b3c\u755c\u7f29\u7801\u7248\u3002\u3002\u3002<br \/>\n(174cm \u3002\u3002\u3002<br \/>\n(\u3002206cm \u3002\u3002\u8fd9\u5c3c\u739b\u8be2\u95ee\u8fc7\u7a0b\u4e5f\u592a\u957f\u4e86\u3002\u3002\u5b9e\u5728\u662f\u7f29\u4e0d\u52a8\u554a\u3002\u3002\u3002<\/p>\n<h3>External link: <\/h3>\n<p><a href=\"http:\/\/acm.mipt.ru\/judge\/problems.pl?problem=105\">http:\/\/acm.mipt.ru\/judge\/problems.pl?problem=105<\/a><\/p>\n<p><a href=\"http:\/\/richardxx.yo2.cn\/articles\/bit_rmq.html\">http:\/\/richardxx.yo2.cn\/articles\/bit_rmq.html<\/a><br \/>\n<a href=\"http:\/\/www.cnblogs.com\/ambition\/archive\/2011\/04\/06\/bit_rmq.html\">http:\/\/www.cnblogs.com\/ambition\/archive\/2011\/04\/06\/bit_rmq.html<\/a><br \/>\n<a href=\"http:\/\/www.cppblog.com\/MatoNo1\/archive\/2011\/03\/19\/142238.html\"><\/a><\/p>\n<p><a href=\"http:\/\/www.cppblog.com\/MatoNo1\/archive\/2011\/03\/19\/142238.html\">http:\/\/www.cppblog.com\/MatoNo1\/archive\/2011\/03\/19\/142238.html<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Brief description: &#8230; RMQ \u6a21\u677f\u9898\u3002\u3002\uff08\u65e0\u4fee\u6539\u3002\u3002\u591a\u8be2\u95ee\u3002\u3002\u3002<\/p>\n","protected":false},"author":1,"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":[16],"tags":[],"class_list":["post-317","post","type-post","status-publish","format-standard","hentry","category-online-judge"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2tdP7-57","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/comments?post=317"}],"version-history":[{"count":1,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/317\/revisions"}],"predecessor-version":[{"id":318,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/317\/revisions\/318"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/media?parent=317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/categories?post=317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/tags?post=317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}