{"id":244,"date":"2012-06-09T21:02:48","date_gmt":"2012-06-09T13:02:48","guid":{"rendered":"http:\/\/www.shuizilong.com\/house\/?p=244"},"modified":"2012-06-09T21:02:48","modified_gmt":"2012-06-09T13:02:48","slug":"%ef%bc%9f%ef%bc%9f%ef%bc%9f%ef%bc%9f","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/house\/archives\/%ef%bc%9f%ef%bc%9f%ef%bc%9f%ef%bc%9f\/","title":{"rendered":"\uff1f\uff1f\uff1f\uff1f"},"content":{"rendered":"<h3>Brief description: <\/h3>\n<p>&#8230;<\/p>\n<p><!--more--><\/p>\n<h3>Analysis: <\/h3>\n<p>&#8230;<\/p>\n<pre class=\"brush: cpp; collapse: true; first-line: 1; light: false; title: example-filename.cpp; toolbar: true; notranslate\" title=\"example-filename.cpp\">\r\n\/*\r\n\tResult: 10201418\t11996\tJewel Magic\tAccepted\tC++\t4.968\t2012-06-07 17:24:29\r\n\tAlgorithm: Splay+Hash+Bianry Search.\r\n*\/\r\n\r\n#include &lt;iostream&gt;\r\n#include &lt;cstdio&gt;\r\n#include &lt;cstring&gt;\r\nusing namespace std ;\r\n\r\ntypedef long long LL ;\r\n\r\n#define fo(i,a,b) for(int i=a;i&lt;=b;i++)\r\n#define fi(i,a,b) for(int i=a;i&gt;=b;i--)\r\n\r\nconst int MaxN = 200009 ;\r\nconst int MOD = 3214567 ;\r\nLL Pow&#x5B;MaxN] ;\r\n\r\nstruct Tnode;          \/\/ Splay\u4e2d\u7684\u4e00\u4e2a\u7ed3\u70b9\r\ntypedef Tnode *Tsplay; \/\/ \u5730\u5740(\u6807\u8bb0\u9884\u7559\u5185\u5b58\u4f7f\u7528\u60c5\u51b5)\r\nTsplay null;           \/\/ \u7a7a\u7ed3\u70b9\u6807\u8bb0\r\nstruct Tnode{\r\n\tTnode *l, *r;\r\n\tint size, key;\r\n\tbool flip ;\r\n\tLL h1, h2 ;\r\n\tTnode() {};\r\n\tTnode(int value): l(null), r(null), size(1), h1(value), h2(value), key(value), flip(false) {};\r\n};\r\nTnode seg&#x5B;MaxN*4]; \/\/ \u5f00\u53cc\u500d\u5185\u5b58\u9884\u7559\r\nTsplay newTnode;   \/\/ \u6807\u8bb0\u9884\u7559\u5185\u5b58\u4f7f\u7528\u5230\u7684\u4f4d\u7f6e\r\n\/*Renew t's inf from t-&gt;l and t-&gt;r*\/\r\nvoid Up  (Tsplay t){\r\n\tt-&gt;size = (t-&gt;l-&gt;size)+(t-&gt;r-&gt;size)+1 ;\r\n\tt-&gt;h1 = ((((t-&gt;l-&gt;h1) * Pow&#x5B;1] + (t-&gt;key)) % MOD) * Pow&#x5B;t-&gt;r-&gt;size] + (t-&gt;r-&gt;h1)) % MOD ;\r\n\tt-&gt;h2 = ((((t-&gt;r-&gt;h2) * Pow&#x5B;1] + (t-&gt;key)) % MOD) * Pow&#x5B;t-&gt;l-&gt;size] + (t-&gt;l-&gt;h2)) % MOD ;\r\n\t\/\/ For ex: size, min, max...\r\n}\r\n\/*Renew (t-&gt;l and t-&gt;r)'s inf from t*\/\r\nvoid Down(Tsplay t){\r\n\t\/\/ For ex: add, flip\r\n\tif ( t-&gt;l != null ) {\r\n\t\tif ( t-&gt;flip ) { swap(t-&gt;l-&gt;h1,t-&gt;l-&gt;h2); swap(t-&gt;l-&gt;l,t-&gt;l-&gt;r); t-&gt;l-&gt;flip^=1; }\r\n\t}\r\n\tif ( t-&gt;r != null ) {\r\n\t\tif ( t-&gt;flip ) { swap(t-&gt;r-&gt;h1,t-&gt;r-&gt;h2); swap(t-&gt;r-&gt;l,t-&gt;r-&gt;r); t-&gt;r-&gt;flip^=1; }\r\n\t}\r\n\tt-&gt;flip = 0;\r\n}\r\nvoid RL(Tsplay &amp;t) { Tsplay s=t-&gt;r; t-&gt;r=s-&gt;l; s-&gt;l=t; Up(t); Up(s); t=s; }\r\nvoid RR(Tsplay &amp;t) { Tsplay s=t-&gt;l; t-&gt;l=s-&gt;r; s-&gt;r=t; Up(t); Up(s); t=s; }\r\nvoid Splay(Tsplay &amp;root, int k) {\r\n\tif (root == null) return;\r\n\tDown(root);\r\n\tif      (k-1==root-&gt;l-&gt;size);     \/\/ Here it is!\r\n\telse if (k  &lt;=root-&gt;l-&gt;size){     \/\/ On the left sub_tree.\r\n\t\tSplay(root-&gt;l,k);\r\n\t\tRR(root);\r\n\t} else {                          \/\/ On the right.\r\n\t\tSplay(root-&gt;r,k-root-&gt;l-&gt;size-1);\r\n\t\tRL(root);\r\n\t}\r\n}\r\n\/*operate in segment &#x5B;p1,p2]*\/\r\nvoid Reverse(Tsplay &amp;root, int p1, int p2) {\r\n\tSplay(root,p1-1); Splay(root, p2+1);\r\n\tswap(root-&gt;l-&gt;r-&gt;h1 , root-&gt;l-&gt;r-&gt;h2);\r\n\tswap(root-&gt;l-&gt;r-&gt;l , root-&gt;l-&gt;r-&gt;r);\r\n\troot-&gt;l-&gt;r-&gt;flip ^= 1;\r\n\t\/\/ Do some change and mark.\r\n}\r\n\/*Insert a new element with key(k) after the p_th element*\/\r\nvoid Insert(Tsplay &amp;root, int p, int k) {\r\n\tTsplay t=++newTnode; *t=Tnode(k);\r\n\tSplay(root, p); t-&gt;r=root-&gt;r; root-&gt;r=t;\r\n\tUp(t); Up(root);\r\n}\r\n\/*Delete the p_th element in the seq.*\/\r\nvoid Delete(Tsplay &amp;root, int p) {\r\n\tSplay(root,p); Splay(root-&gt;r,1);\r\n\troot-&gt;r-&gt;l=root-&gt;l; root=root-&gt;r;\r\n\tUp(root);\r\n}\r\nLL Hash(Tsplay &amp;root, int p1, int p2) {\r\n\tSplay(root,p1-1); Splay(root, p2+1);\r\n\treturn root-&gt;l-&gt;r-&gt;h1;\r\n}\r\n\/*************************************************\/\r\nTsplay root;\r\n\/*Init Splay: Insert TWO node with key=INF*\/\r\nvoid InitSplay(Tsplay &amp;root) {\r\n\tnewTnode=seg; null=seg;\r\n\t*null=Tnode(-1); null-&gt;size=0;\r\n\troot=++newTnode;\r\n\tTsplay tmp=++newTnode;\r\n\t*root=Tnode(-1); *tmp=Tnode(-1);\r\n\troot-&gt;r=tmp; root-&gt;size=2;\r\n}\r\n\r\nint N , M ;\r\nint main() {\r\n\tPow&#x5B;0] = 1LL ;\r\n\tfo(i,1,200000) Pow&#x5B;i]=(Pow&#x5B;i-1]*13) % MOD;\r\n\twhile (scanf(&quot;%d %d&quot;, &amp;N, &amp;M) != EOF) {\r\n\t\tInitSplay(root) ;\r\n\t\tgetchar(); char r ; fo(i,1,N) {\r\n\t\t\tr = getchar() ; Insert(root,i,r-'0') ;\r\n\t\t}\r\n\t\twhile ( M -- ) {\r\n\t\t\tint o , p1 , p2 , c ; scanf(&quot;%d&quot;, &amp;o) ;\r\n\t\t\tif ( o == 1 ) { scanf(&quot;%d%d&quot;, &amp;p1, &amp;c); Insert(root,p1+1,c) ; N ++ ; }\r\n\t\t\tif ( o == 2 ) { scanf(&quot;%d&quot;, &amp;p1) ; Delete(root,p1+1) ; N -- ; }\r\n\t\t\tif ( o == 3 ) { scanf(&quot;%d%d&quot;, &amp;p1, &amp;p2) ; Reverse(root,p1+1,p2+1) ; }\r\n\t\t\tif ( o == 4 ) {\r\n\t\t\t\tscanf(&quot;%d%d&quot;, &amp;p1, &amp;p2);\r\n\t\t\t\tint k = 1 ; while ( p1 + k*2 - 1 &lt;= N &amp;&amp; p2 + k*2 - 1 &lt;= N ) k *= 2 ;\r\n\t\t\t\tint ans = 0 ;\r\n\t\t\t\twhile ( k &gt; 0 ) {\r\n\t\t\t\t\tif ( p1+k-1 &gt; N || p2+k-1 &gt; N ) { k \/= 2 ; continue ; }\r\n\t\t\t\t\tif ( Hash(root,p1+1,p1+k-1+1) == Hash(root,p2+1,p2+k-1+1) ) {\r\n\t\t\t\t\t\tans += k ;\r\n\t\t\t\t\t\tp1 += k , p2 += k ;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tk \/= 2 ;\r\n\t\t\t\t}\r\n\t\t\t\tprintf(&quot;%d\\n&quot;, ans);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n<\/pre>\n<h3>External link: <\/h3>\n<p><a href=\"http:\/\/uva.onlinejudge.org\/index.php?option=com_onlinejudge&#038;Itemid=8&#038;page=show_problem&#038;problem=3147\">http:\/\/uva.onlinejudge.org\/index.php?option=com_onlinejudge&#038;Itemid=8&#038;page=show_problem&#038;problem=3147<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Brief description: &#8230;<\/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":[31],"tags":[24],"class_list":["post-244","post","type-post","status-publish","format-standard","hentry","category-uva","tag-24"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2tdP7-3W","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/244","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=244"}],"version-history":[{"count":1,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/244\/revisions"}],"predecessor-version":[{"id":246,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/244\/revisions\/246"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/media?parent=244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/categories?post=244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/tags?post=244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}