TAT,我的LCT转双旋了
这里是rotate和splay函数
void rotate(int x) { int y=pre[x],z=pre[y],d=ch[y][0]==x; ch[y][d^1]=ch[x][d];pre[ch[x][d]]=y; ch[z][ch[z][1]==y]=x;pre[x]=z; ch[x][d]=y;pre[y]=x;maintain(y); } int q[maxn],top; void splay(int x) { for(int i=x;i;i=pre[i]) q[++top]=i; if(q[top]!=x) fa[x]=fa[q[top]],fa[q[top]]=0; while(top) pushdown(q[top--]); while(pre[x]) { int y=pre[x],z=pre[y]; if(pre[y]) if(ch[y][0]==x^ch[z][0]==y) rotate(x);else rotate(y); rotate(x); } maintain(x); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步