博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ3223]文艺平衡树
阅读量:6236 次
发布时间:2019-06-22

本文共 2140 字,大约阅读时间需要 7 分钟。

题目大意:

  实现一个数据结构支持区间翻转操作共$n(n\leq100000)$次。

思路:

  Splay维护区间。
  对于区间$[l,r]$的翻转可以先将$l-1$旋转到根,再把$r+1$旋转到根的右子结点,此时根结点的右子结点的左子树就是需要翻转的区间。注意翻转过后结点的权值可能不满足二叉搜索树的性质,也不需要满足二叉搜索树的性质。

1 #include
2 #include
3 #include
4 inline int getint() { 5 register char ch; 6 while(!isdigit(ch=getchar())); 7 register int x=ch^'0'; 8 while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0'); 9 return x;10 }11 const int N=100003;12 int n,ans[N];13 class SplayTree {14 private:15 int val[N],par[N],size[N],ch[N][2];16 bool rev[N];17 int sz,new_node(const int &x) {18 val[++sz]=x;19 size[sz]=1;20 return sz;21 }22 void push_down(const int &p) {23 if(!rev[p]) return;24 std::swap(ch[p][0],ch[p][1]);25 rev[ch[p][0]]^=1;26 rev[ch[p][1]]^=1;27 rev[p]=0;28 }29 void push_up(const int &p) {30 size[p]=size[ch[p][0]]+size[ch[p][1]]+1;31 }32 void rotate(const int &x) {33 const int y=par[x],z=par[y];34 push_down(y),push_down(x);35 const bool b=x==ch[y][0];36 par[ch[x][b]=par[ch[y][!b]=ch[x][b]]=y]=x;37 if(par[x]=z) par[ch[z][ch[z][1]==y]=x]=z;38 push_up(y),push_up(x);39 }40 void splay(int x,const int &goal) {41 for(register int y=par[x],z=par[y];y!=goal;rotate(x),z=par[y=par[x]]) {42 if(z!=goal) rotate((x==ch[y][0])^(y==ch[z][0])?x:y);43 }44 if(!goal) root=x;45 }46 public:47 int root;48 void insert(const int &x) {49 int y=root;50 while(ch[y][x>val[y]]) y=ch[y][x>val[y]];51 par[ch[y][x>val[y]]=new_node(x)]=y;52 splay(sz,0);53 }54 void build(const int &n) {55 for(register int i=0;i<=n+1;i++) insert(i);56 }57 int find(int x) {58 for(register int y=root;;y=ch[y][size[ch[y][0]]

 

转载于:https://www.cnblogs.com/skylee03/p/8510660.html

你可能感兴趣的文章
Java集合的10个最常见问题
查看>>
【转】JSP中的9大隐藏对象
查看>>
如何用MathType编辑下丁字符号出来
查看>>
WEB前端开发成长指南
查看>>
代理模式
查看>>
PHP正则表达式详解(三)
查看>>
linux 内核 2.5-4.7 版本change
查看>>
java的ArrayList使用方法
查看>>
十招让Ubuntu 16.04用起来更得心应手
查看>>
awk笔记1
查看>>
Maven for Eclipse 第三章 ——创建和导入 Maven 项目
查看>>
js jquery中 的数据类型
查看>>
DenyHosts安装及配置
查看>>
表单多文件上传样式美化 && 支持选中文件后删除相关项
查看>>
利用Axis2默认口令安全漏洞可入侵WebService网站
查看>>
java-----基本数据类型包装类
查看>>
MD5 SHA-1 示例
查看>>
【WPF】退出应用时的提示弹窗
查看>>
Node.js - 断言
查看>>
缓存穿透,缓存雪崩,热点key及解决办法
查看>>