{"id":63,"date":"2010-01-02T15:27:00","date_gmt":"2010-01-02T07:27:00","guid":{"rendered":"http:\/\/localhost\/?p=63"},"modified":"2010-01-02T15:27:00","modified_gmt":"2010-01-02T07:27:00","slug":"spoj_3273_orderset","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/wjmzbmr\/?p=63","title":{"rendered":"SPOJ 3273 ORDERSET"},"content":{"rendered":"<p> \u5c31\u662f\u6807\u51c6\u7684\u5e73\u8861\u4e8c\u53c9\u6570\u3002\u3002<br \/>\u6709insert,delete,rank,select\u56db\u4e2a\u64cd\u4f5c\u3002\u3002<br \/>\u6211\u7528splay\u5c31\u662f\u8d85\u65f6\u3002\u3002\u3002\u5988\u5440\u3002\u3002\u6700\u540e\u7528\u522b\u4eba\u7684SBT\u8fc7\u6389\u4e86\u3002\u3002<br \/>Code:<br \/>#include&lt;cstdio&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;<br \/>  bool d;<br \/>  node*c[2],*p; <br \/>  void sc(node*_c,bool d)<br \/>  {c[d]=_c;_c-&gt;p=this;_c-&gt;d=d;}<br \/> }*root,*Null,*Now,*stack[100000],Data[200000],*tmp;<br \/> int top;<br \/> typedef node* Node;<br \/> Node new_node(int k)<br \/> {<br \/>  if(top) tmp=stack[&#8211;top];<br \/>  else tmp=Now++;<br \/>  tmp-&gt;k=k;tmp-&gt;s=1;<br \/>  tmp-&gt;c[0]=tmp-&gt;c[1]=Null;<br \/>  return tmp;<br \/> }<br \/> void del_node(Node p)<br \/> {<br \/>  stack[top++]=p;<br \/> }<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(int k)<br \/> {<br \/>  int r;<br \/>  for(Node t=root-&gt;c[1];;)<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 ser(Node t,int k)<br \/> {<br \/>  for(;t!=Null&amp;&amp;t-&gt;k!=k;t=t-&gt;c[k&gt;t-&gt;k]);<br \/>  return t;<br \/> }<br \/> Node insert(int k)<br \/> {<br \/>  bool d;Node t=root;<br \/>  for(;t-&gt;k!=k;)<br \/>  {    <br \/>   d=k&gt;t-&gt;k;<br \/>   if(t-&gt;c[d]==Null)<br \/>   {<br \/>    Node p=new_node(k);<br \/>    t-&gt;sc(p,d);<br \/>   }<br \/>   t=t-&gt;c[d];<br \/>  }<br \/>  return t;<br \/> }<br \/> int rank(int k)<br \/> {<br \/>  int ans=0;<br \/>  for(Node t=root-&gt;c[1];t!=Null;)<br \/>  {<br \/>   if(k&gt;t-&gt;k) ans+=1+t-&gt;c[0]-&gt;s;<br \/>   t=t-&gt;c[k&gt;t-&gt;k];<br \/>  }<br \/>  return ans;<br \/> }<br \/>public:<br \/> splay()<br \/> {  <br \/>  top=0;Now=Data;<br \/>  Null=new_node(0);Null-&gt;s=0;<br \/>  root=new_node(-inf);root-&gt;p=root;<br \/> }<br \/> void ins(int x)<br \/> {<br \/>  Node p=insert(x);<br \/>  spl(p,root);<br \/> }<br \/> int sel(int x)<br \/> {<br \/>  if(x&gt;=root-&gt;c[1]-&gt;s) return inf;<br \/>  Node p=select(x);<br \/>  return p-&gt;k;<br \/> }<br \/> int ran(int x)<br \/> {<br \/>  return rank(x);<br \/> }<br \/> void del(int k)<br \/> {  <br \/>  Node tmp=ser(root-&gt;c[1],k);if(tmp==Null) return;<br \/>  while(tmp-&gt;c[0]!=Null)<br \/>   rot(tmp-&gt;c[0]);<br \/>  if(tmp-&gt;c[1]==Null)<br \/>  {<br \/>   tmp-&gt;p-&gt;c[tmp-&gt;d]=Null;<br \/>   tmp-&gt;p-&gt;s&#8211;;<br \/>   spl(tmp-&gt;p,root);<br \/>   del_node(tmp);<br \/>   return;<br \/>  }<br \/>  tmp-&gt;p-&gt;sc(tmp-&gt;c[1],tmp-&gt;d); <br \/>  spl(tmp-&gt;c[1],root);<br \/>  del_node(tmp);<br \/> }<br \/>}*sp;<br \/>int main()<br \/>{<br \/> int n,t,a;char c;sp=new splay;scanf(&quot;%dn&quot;,&amp;n);char C[1000];<br \/> for(int i=0;i&lt;n;i++)<br \/> {<br \/>  scanf(&quot;%c %dn&quot;,&amp;c,&amp;t);<br \/>  switch(c)<br \/>  {<br \/>   case &#8216;I&#8217;:sp-&gt;ins(t);break;<br \/>   case &#8216;D&#8217;:sp-&gt;del(t);break;<br \/>   case &#8216;K&#8217;:a=sp-&gt;sel(t-1);<br \/>    if(a==inf) puts(&quot;invalid&quot;);<br \/>    else <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\">printf<\/a>(&quot;%dn&quot;,a);break;<br \/>   case &#8216;C&#8217;:<a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\">printf<\/a>(&quot;%dn&quot;,sp-&gt;ran(t));break;<br \/>  }<br \/> }<br \/>} <\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5c31\u662f\u6807\u51c6\u7684\u5e73\u8861\u4e8c\u53c9\u6570\u3002\u3002\u6709insert,delete,rank,select\u56db\u4e2a\u64cd\u4f5c\u3002\u3002\u6211\u7528splay\u5c31\u662f\u8d85\u65f6\u3002\u3002\u3002\u5988\u5440\u3002\u3002\u6700\u540e\u7528\u522b\u4eba\u7684SBT\u8fc7\u6389\u4e86\u3002\u3002Code:#include&lt;cstdio&gt;using namespace std;const int inf=~0U&gt;&gt;1;class splay{ struct node { int k,s; bool d; node*c[2],*p; void sc(node*_c,bool d) {c[d]=_c;_c-&gt;p=this;_c-&gt;d=d;} }*root,*Null,*Now,*stack[100000],Data[200000],*tmp; int top; typedef node* Node; Node new_node(int k) { if(top) tmp=stack[&#8211;top]; else tmp=Now++; tmp-&gt;k=k;tmp-&gt;s=1; tmp-&gt;c[0]=tmp-&gt;c[1]=Null; return tmp; } void del_node(Node p) { stack[top++]=p; } 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; [&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\/63"}],"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=63"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/63\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=63"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=63"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=63"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}