{"id":483,"date":"2018-12-16T14:34:45","date_gmt":"2018-12-16T06:34:45","guid":{"rendered":"http:\/\/SmokeyDays.top\/wordpress\/?p=483"},"modified":"2018-12-16T14:34:45","modified_gmt":"2018-12-16T06:34:45","slug":"lp3391-%e3%80%90%e6%a8%a1%e6%9d%bf%e3%80%91%e6%96%87%e8%89%ba%e5%b9%b3%e8%a1%a1%e6%a0%91%ef%bc%88splay%ef%bc%89","status":"publish","type":"post","link":"http:\/\/SmokeyDays.top\/wordpress\/2018\/12\/16\/lp3391-%e3%80%90%e6%a8%a1%e6%9d%bf%e3%80%91%e6%96%87%e8%89%ba%e5%b9%b3%e8%a1%a1%e6%a0%91%ef%bc%88splay%ef%bc%89\/","title":{"rendered":"lp3391 \u3010\u6a21\u677f\u3011\u6587\u827a\u5e73\u8861\u6811\uff08Splay\uff09"},"content":{"rendered":"\n<p>\u867d\u7136\u8bf4\u662f\u6a21\u677f\u9898\uff0c\u4f46\u5b9e\u9645\u4e0a\u65f6\u5019\u5728\u8003\u5bdfSplay\u4e00\u4e2a\u5f88\u5de7\u5999\u7684\u8fd0\u7528\uff0c\u4e5f\u5c31\u662f\u7528Splay\u6a21\u62df\u533a\u95f4\u3002<br>\n\u9996\u5148\u6211\u4eec\u53d1\u73b0\u4e8c\u53c9\u6392\u5e8f\u6811\u4e00\u4e2a\u5f88\u5de7\u5999\u7684\u6027\u8d28\uff1a\u5bf9\u4e8e\u4e00\u4e2a\u70b9\\(a\\)\u548c\u5b83\u7684\u4e00\u4e2a\u5b69\u5b50\\(b\\)\uff0c\u82e5\u4ee4\\(b\\)\u662f\\(a\\)\u7684\\(D\\)\u65b9\u5411\u7684\u5b69\u5b50\uff0c<br>\n\u90a3\u4e48\u533a\u95f4\\((a,b)\\)\u5185\u7684\u6240\u6709\u6570\u90fd\u5728\u4ee5\\(b\\)\u7684\\(D\\ xor\\ 1\\)\u65b9\u5411\u4e0a\u7684\u5b69\u5b50\u4e3a\u6839\u7684\u5b50\u6811\u4e2d\u3002 <br>\n\u7136\u540e\u6211\u4eec\u8003\u8651\u7ffb\u8f6c\u64cd\u4f5c\u3002\u6211\u4eec\u6beb\u4e0d\u60ca\u8bb6\u5730\u53d1\u73b0\uff0c\u5f53\u6211\u4eec\u5c06\u4e00\u68f5\u5b50\u6811\u4e0a\u7684\u6240\u6709\u8282\u70b9\u90fd\u5de6\u53f3\u8c03\u6362\u4ee5\u540e\uff0c\u8fd9\u68f5\u5b50\u6811\u6240\u4ee3\u8868\u7684\u533a\u95f4\u5c31\u5b8c\u6210\u4e86\u7ffb\u8f6c\u3002<br>\n\u5bf9\u4e8e\u4e00\u4e2a\u8282\u70b9\u6765\u8bf4\uff0c\u5b83\u7684\u4f4d\u7f6e\u5c31\u5df2\u7ecf\u8868\u793a\u4e86\u5b83\u7684\u5927\u5c0f\u3002<br>\n\u4f46\u662f\uff0c\u5982\u679c\u5bf9\u4e8e\u6bcf\u4e00\u6b21\u7ffb\u8f6c\u6211\u4eec\u90fd\u7ffb\u8f6c\u6574\u68f5\u5b50\u6811\u7684\u8bdd\uff0c\u590d\u6742\u5ea6\u662f\u4e0d\u53ef\u63a5\u53d7\u7684\u3002\u6211\u4eec\u8003\u8651\u4e00\u79cd\u7c7b\u7ebf\u6bb5\u6811\u7684\u64cd\u4f5c\u65b9\u6cd5\uff0c\u4e5f\u5c31\u662f\u4f7f\u7528\\(Lazy Tag\\)\u6765\u7ef4\u62a4\u7ffb\u8f6c\u3002<br>\n\u800c\uff0c\u9664\u4e86\u7ffb\u8f6c\u64cd\u4f5c\u4e4b\u5916\uff0c\u4f1a\u6539\u53d8\u6811\u7684\u7ed3\u6784\u7684\u53ea\u6709\u65cb\u8f6c\u64cd\u4f5c\u3002\u4e8e\u662f\u6211\u4eec\u53ea\u9700\u8981\u5728\u65cb\u8f6c\u4e4b\u524d\u4e0b\u653e\\(x\\)\u548c\\(fa\\)\u7684\u5ef6\u8fdf\u6807\u8bb0\u5373\u53ef\u3002<br>\n\u53e6\u5916\u5c24\u5176\u8981\u6ce8\u610f\u4e0d\u8981\u65cb\u8f6c\u8fc7\u5934\u3002 <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include&lt;iostream>\n#include&lt;cstdio>\nclass Splay{\n\tprivate:\n\t\tclass Node{\n\t\t\tpublic:\n\t\t\t\tint v;\n\t\t\t\tint sz;\n\t\t\t\tint fa;\n\t\t\t\tint sn[2];\n\t\t\t\tint lzy;\n\t\t};\n\t\tNode tr[200005];\n\t\tint rt;\n\t\tinline void prnt(int X){\n\t\t\tif(!X){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpshd(X);\n\t\t\tprnt(tr[X].sn[0]);\n\t\t\tprintf(\"%d \",tr[X].v);\n\t\t\tprnt(tr[X].sn[1]);\n\t\t}\n\t\tinline void debugPrnt(int X){\n\t\t\tif(!X){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpshd(X);\n\t\t\tdebugPrnt(tr[X].sn[0]);\n\t\t\tprintf(\"[%d,%d]{%d}:%d \",tr[X].sn[0],tr[X].sn[1],tr[X].fa,tr[X].v);\n\t\t\tdebugPrnt(tr[X].sn[1]);\n\t\t}\n\t\tinline void pshd(int X){\n\t\t\tif(tr[X].lzy){\n\t\t\t\ttr[X].lzy^=1;\n\t\t\t\ttr[tr[X].sn[0]].lzy^=1,tr[tr[X].sn[1]].lzy^=1;\n\t\t\t\tstd::swap(tr[X].sn[0],tr[X].sn[1]);\n\t\t\t}\n\t\t}\n\t\tinline void updt(int X){\n\t\t\ttr[X].sz=tr[tr[X].sn[0]].sz+tr[tr[X].sn[1]].sz+1;\n\t\t}\n\t\tinline int fndD(int X){\n\t\t\treturn tr[tr[X].fa].sn[0]==X?0:1;\n\t\t}\n\t\tinline void splayOne(int X){\n\t\t\tint D=fndD(X),D2=fndD(tr[X].fa);\n\t\t\tpshd(tr[X].fa),pshd(X);\n\t\t\ttr[tr[X].sn[D^1]].fa=tr[X].fa,tr[tr[X].fa].sn[D]=tr[X].sn[D^1];\n\t\t\ttr[X].sn[D^1]=tr[X].fa,tr[X].fa=tr[tr[X].fa].fa;\n\t\t\ttr[tr[X].fa].sn[D2]=X,tr[tr[X].sn[D^1]].fa=X;\n\t\t\tupdt(tr[X].sn[D^1]),updt(X);\n\t\t}\n\t\tinline void splayRnw(int X){\n\t\t\twhile(tr[X].fa){\n\t\t\t\tsplayOne(X);\n\t\t\t}\n\t\t\trt=X; \n\t\t}\n\t\tinline int fnd(int X){\n\t\t\tint P=rt,FP=0;\n\t\t\twhile(P){\n\t\t\t\tpshd(P);\n\t\t\t\tFP=P;\n\t\t\t\tif(tr[tr[P].sn[0]].sz+1&lt;X){\n\t\t\t\t\tX-=(tr[tr[P].sn[0]].sz+1);\n\t\t\t\t\tP=tr[P].sn[1];\n\t\t\t\t}else if(tr[tr[P].sn[0]].sz&lt;X){\n\t\t\t\t\treturn P;\n\t\t\t\t}else{\n\t\t\t\t\tP=tr[P].sn[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn FP;\n\t\t}\n\tpublic:\n\t\tinline void build(int N){\n\t\t\tfor(int i=1;i&lt;=N;++i){\n\t\t\t\ttr[i].sn[0]=i-1;\n\t\t\t\ttr[i].v=i;\n\t\t\t\ttr[i].fa=i+1;\n\t\t\t\ttr[i].sz=1;\n\t\t\t}\n\t\t\ttr[N].fa=0;\n\t\t\ttr[1].sn[0]=N+1,tr[N].sn[1]=N+2;\n\t\t\ttr[N+1].v=-2147483647,tr[N+2].v=2147483647;\n\t\t\ttr[N+1].fa=1,tr[N+2].fa=N;\n\t\t\ttr[N+1].sz=1,tr[N+2].sz=1;\n\t\t\trt=N;\n\t\t\tsplayRnw(N+1);\n\t\t\tsplayRnw(N+2);\n\t\t}\n\t\tinline void flp(int L,int R){\n\t\t\t\/\/printf(\"[%d](%d,%d)\\n\",rt,fnd(L),fnd(R+2));\n\t\t\tsplayRnw(fnd(L));\n\t\t\tsplayRnw(fnd(R+2));\n\t\t\ttr[tr[tr[rt].sn[0]].sn[1]].lzy^=1;\n\t\t}\n\t\tinline void splayPrnt(int N){\n\t\t\tsplayRnw(N+1);\n\t\t\tsplayRnw(N+2);\n\t\t\tprnt(tr[tr[rt].sn[0]].sn[1]);\n\t\t\tputs(\"\");\n\t\t}\n\t\tinline void debug(){\n\t\t\tprintf(\"%d ->\",rt);\n\t\t\tdebugPrnt(rt);\n\t\t\tputs(\"\");\n\t\t}\n};\nint n,q;\nSplay T;\nvoid init(){\n\tint n,q;\n\tscanf(\"%d%d\",&amp;n,&amp;q);\n\tint l,r;\n\tT.build(n);\n\tfor(int i=1;i&lt;=q;++i){\n\t\tscanf(\"%d%d\",&amp;l,&amp;r);\n\t\tT.flp(l,r);\n\t}\n\tT.splayPrnt(n);\n}\nint main(){\n\tinit();\n\treturn 0;\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u867d\u7136\u8bf4\u662f\u6a21\u677f\u9898\uff0c\u4f46\u5b9e\u9645\u4e0a\u65f6\u5019\u5728\u8003\u5bdfSplay\u4e00\u4e2a\u5f88\u5de7\u5999\u7684\u8fd0\u7528\uff0c\u4e5f\u5c31\u662f\u7528Splay\u6a21\u62df\u533a\u95f4\u3002 \u9996\u5148\u6211\u4eec\u53d1\u73b0\u4e8c\u53c9\u6392 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/SmokeyDays.top\/wordpress\/2018\/12\/16\/lp3391-%e3%80%90%e6%a8%a1%e6%9d%bf%e3%80%91%e6%96%87%e8%89%ba%e5%b9%b3%e8%a1%a1%e6%a0%91%ef%bc%88splay%ef%bc%89\/\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">\u201clp3391 \u3010\u6a21\u677f\u3011\u6587\u827a\u5e73\u8861\u6811\uff08Splay\uff09\u201d<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[62,43,8,6],"tags":[],"_links":{"self":[{"href":"http:\/\/SmokeyDays.top\/wordpress\/wp-json\/wp\/v2\/posts\/483"}],"collection":[{"href":"http:\/\/SmokeyDays.top\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/SmokeyDays.top\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/SmokeyDays.top\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/SmokeyDays.top\/wordpress\/wp-json\/wp\/v2\/comments?post=483"}],"version-history":[{"count":1,"href":"http:\/\/SmokeyDays.top\/wordpress\/wp-json\/wp\/v2\/posts\/483\/revisions"}],"predecessor-version":[{"id":484,"href":"http:\/\/SmokeyDays.top\/wordpress\/wp-json\/wp\/v2\/posts\/483\/revisions\/484"}],"wp:attachment":[{"href":"http:\/\/SmokeyDays.top\/wordpress\/wp-json\/wp\/v2\/media?parent=483"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/SmokeyDays.top\/wordpress\/wp-json\/wp\/v2\/categories?post=483"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/SmokeyDays.top\/wordpress\/wp-json\/wp\/v2\/tags?post=483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}