{"id":59,"date":"2009-12-31T19:41:00","date_gmt":"2009-12-31T11:41:00","guid":{"rendered":"http:\/\/localhost\/?p=59"},"modified":"2009-12-31T19:41:00","modified_gmt":"2009-12-31T11:41:00","slug":"splay","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/wjmzbmr\/?p=59","title":{"rendered":"Splay"},"content":{"rendered":"<p> \u8d5e\u8d5e\u963f\u3002\u3002<br \/>Splay\u7edd\u5bf9\u662f\u6700\u5b8c\u7f8e\u7684\u5e73\u8861\u6811\u3002\u3002\u9664\u4e86\u65f6\u95f4\u6bd4\u8f83\u6162\u3002\u3002\u5176\u4ed6\u7edd\u5bf9\u662f\u6700NB\u7684\u3002\u3002<br \/>\u60f3\u51fa\u8fd9\u73a9\u610f\u7684\u4eba\u7edd\u5bf9\u662f\u5929\u624d\u4e2d\u7684\u5929\u624d\u3002\u3002\u3002<br \/>\u5199\u4e86\u4e2aCode\u3002\u3002\u8d34\u4e00\u4e0b\u3002\u3002<br \/>#include&lt;cstdio&gt;<br \/>#include&lt;iostream&gt;<br \/>using namespace std;<br \/>const int inf=~0U&gt;&gt;1;<br \/>class splay<br \/>{<br \/> struct node<br \/> {<br \/>  int k,s;\/\/k\u662f\u503c,s\u662f\u5b50\u6811\u5927\u5c0f<br \/>  bool d;\/\/d\u662f\u8be5\u8282\u70b9\u662f\u7236\u4eb2\u7684\u90a3\u79cd\u8282\u70b9<br \/>  node*c[2],*p;\/\/c[0]\u3001c[1]\u5206\u522b\u662f\u5de6\uff0c\u53f3\u5b69\u5b50\uff0cp\u662f\u7236\u4eb2<br \/>  node(int _k,node*_c):k(_k),s(1){c[0]=c[1]=_c;}  <br \/>  void sc(node*_c,bool d) \/\/sc means set child<br \/>  {c[d]=_c;_c-&gt;p=this;_c-&gt;d=d;}<br \/> }*root,*Null,*Now;<br \/> typedef node* Node;<br \/> void upd(Node t)<br \/> {<br \/>  t-&gt;s=t-&gt;c[0]-&gt;s+t-&gt;c[1]-&gt;s+1; <br \/> }<br \/> void rot(Node t)<br \/> {<br \/>  node*p=t-&gt;p;bool d=t-&gt;d;<br \/>  p-&gt;sc(t-&gt;c[!d],d);<br \/>  p-&gt;p-&gt;sc(t,p-&gt;d);<br \/>  t-&gt;sc(p,!d); <br \/>  upd(p);upd(t);<br \/> }<br \/> void spl(Node x,Node f)<br \/> {<br \/>  while(x-&gt;p!=f)<br \/>  {<br \/>   if(x-&gt;p-&gt;p==f) rot(x);<br \/>   else x-&gt;d==x-&gt;p-&gt;d?( rot(x-&gt;p),rot(x) ):( rot(x),rot(x) );<br \/>  }<br \/> } <br \/> Node select(Node t,int k)<br \/> {<br \/>  int r;<br \/>  for(;;)<br \/>  {  <br \/>   r=t-&gt;c[0]-&gt;s;<br \/>   if(r==k) return t;<br \/>   t=t-&gt;c[k&gt;r];<br \/>   if(k&gt;r) k-=r+1;<br \/>  }<br \/> }<br \/> Node insert(Node t,int k)<br \/> {<br \/>  bool d=k&gt;t-&gt;k;<br \/>  if(t-&gt;c[d]==Null)<br \/>  {<br \/>   Node p=new node(k,Null);<br \/>   t-&gt;sc(p,d);<br \/>   return p;<br \/>  }<br \/>  return insert(t-&gt;c[d],k);<br \/> }<br \/>public:<br \/> splay()<br \/> {<br \/>  Null=new node(0,0);Null-&gt;s=0;<br \/>  root=new node(-inf,Null);<br \/> }<br \/> void ins(int x)<br \/> {<br \/>  Node p=insert(root,x);<br \/>  spl(p,root);<br \/> }<br \/> int sel(int x)<br \/> {<br \/>  Node p=select(root-&gt;c[1],x);<br \/>  spl(p,root);<br \/>  return p-&gt;k;<br \/> } <br \/>}*sp;<br \/>int main()<br \/>{<br \/> freopen(&quot;in&quot;,&quot;r&quot;,stdin);<br \/> int n;int k,a;sp=new splay;cin&gt;&gt;n;<br \/> for(int i=0;i&lt;n;i++)<br \/> {<br \/>  scanf(&quot;%d %d&quot;,&amp;k,&amp;a);<br \/>  if(k==0)<br \/>   sp-&gt;ins(a);<br \/>  else<br \/> <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\">printf<\/a>(&quot;%dn&quot;,sp-&gt;sel(a));<br \/> }<br \/>} <\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8d5e\u8d5e\u963f\u3002\u3002Splay\u7edd\u5bf9\u662f\u6700\u5b8c\u7f8e\u7684\u5e73\u8861\u6811\u3002\u3002\u9664\u4e86\u65f6\u95f4\u6bd4\u8f83\u6162\u3002\u3002\u5176\u4ed6\u7edd\u5bf9\u662f\u6700NB\u7684\u3002\u3002\u60f3\u51fa\u8fd9\u73a9\u610f\u7684\u4eba\u7edd\u5bf9\u662f\u5929\u624d\u4e2d\u7684\u5929\u624d\u3002\u3002\u3002\u5199\u4e86\u4e2aCode\u3002\u3002\u8d34\u4e00\u4e0b\u3002\u3002#include&lt;cstdio&gt;#include&lt;iostream&gt;using namespace std;const int inf=~0U&gt;&gt;1;class splay{ struct node { int k,s;\/\/k\u662f\u503c,s\u662f\u5b50\u6811\u5927\u5c0f bool d;\/\/d\u662f\u8be5\u8282\u70b9\u662f\u7236\u4eb2\u7684\u90a3\u79cd\u8282\u70b9 node*c[2],*p;\/\/c[0]\u3001c[1]\u5206\u522b\u662f\u5de6\uff0c\u53f3\u5b69\u5b50\uff0cp\u662f\u7236\u4eb2 node(int _k,node*_c):k(_k),s(1){c[0]=c[1]=_c;} void sc(node*_c,bool d) \/\/sc means set child {c[d]=_c;_c-&gt;p=this;_c-&gt;d=d;} }*root,*Null,*Now; typedef node* Node; void upd(Node t) { t-&gt;s=t-&gt;c[0]-&gt;s+t-&gt;c[1]-&gt;s+1; } void rot(Node t) { node*p=t-&gt;p;bool d=t-&gt;d; p-&gt;sc(t-&gt;c[!d],d); p-&gt;p-&gt;sc(t,p-&gt;d); t-&gt;sc(p,!d); upd(p);upd(t); } void spl(Node x,Node f) { while(x-&gt;p!=f) { if(x-&gt;p-&gt;p==f) rot(x); else [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/59"}],"collection":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=59"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/59\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=59"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=59"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}